利用选择排序为shell排序提速

来源:互联网 发布:淘宝加盟店辨别真假 编辑:程序博客网 时间:2024/06/07 15:36
#include <stdio.h>

void swapValue(int *temArr, int i, int j){
    int tem = temArr[i];
    temArr[i] = temArr[j];
    temArr[j] = tem;
}

//基于增量的选择排序
void selectSort(int* temArr, int n, int delta){
    for (int i=0; i<n; i = i + delta) {
        int minIndex = i;
        for (int j = i+delta; j<n; j+=delta) {
            if (temArr[j] < temArr[minIndex]) {
                minIndex = j;
            }
        }
        swapValue(temArr, i, minIndex);
    }
}

//shell排序
void shellSort(int *arr, int n){
    for (int delta = n / 2; delta > 0; delta=delta/2) {
        for (int i=0; i<delta; i++) {
            selectSort(&arr[i], n-i, delta);
            //printf("第%d次 增量%d\n", i, delta);
            for (int i=0; i<n; i++) {
                printf("%d ", arr[i]);
            }
            printf("\n");
        }
    }
    //扫尾排序
//    insertSort(&arr[0], n, 1);
}



int main(int argc, const char * argv[]) {
    int n;
    scanf("%d", &n);
    int *arr = (int*)malloc(n*sizeof(int));
    for (int i=0; i<n; i++) {
        scanf("%d", &arr[i]);
    }
    shellSort(arr, n);
    
    return 0;
}

1 0
原创粉丝点击