コード例 #1
0
ファイル: SELECT2_1.1.c プロジェクト: chaohu/Daily-Learning
int SEL(int *A,int m,int p,int k,int r) {
    int temp = 0;
    int n = 0,i = 0,j = 0;
    if(p - m + 1 <= r) {
        INSERTIONSORT(A,m,p);
        return m + k - 1;
    }
    while(1) {
        n = p - m + 1;
        for(i = 1;i <= n/r;i++) {
            INSERTIONSORT(A,m + (i - 1) * r,m + i * r - 1); //将中间值收集到A的前部
            temp = A[m+i-1];
            if(r%2) r++;
            A[m+i-1] = A[m+(i-1)*r+r/2-1];
            A[m+(i-1)*r+r/2-1] = temp;
        }
        if((n / r) % 2) j = (n / r) / 2;
        else j = (n / r) / 2 + 1;
        j = SEL(A,m,m + n/r - 1,j,r);
        temp = A[m];
        A[m] = A[j];
        A[j] = A[m];
        j = p + 1;
        j = PARTITION(A,m,j);
        if(j - m + 1 == k) return j;
        else if(j - m + 1 > k) p = j -1;
        else {
            k = k - (j - m + 1);
            m = j + 1;
        }
    }
}
コード例 #2
0
ファイル: BucketSort.c プロジェクト: AllanChen/PersonalWiki
/* [0,1) */
void BUCKETSORT(int A[], int array_size)
{
	int n = array_size;
	for (int i = 1; i <= n; i++)
		insert_list(B[n*A[i]], A[i]);
	for (int i = 0; i <= n - 1; i++)
		INSERTIONSORT(B[i], B[i].array_size);
}