/*
说明:
插入排序法由未排序的后半部分前端取出一个值,插入已排序前半部分的适当位置,概念简单但速度不快。
排序要加快的基本原则之一,是让后一次的排序进行时,尽量利用前一次排序后的结果,以加快排序的速度,Shell排序法即是基于此一概念来改良
插入排序法。
解法:
略
*/
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define MAX 10
#define SWAP(x, y) {int t; t = x; x = y; y = t;}
void shellsort(int[]);
int main(void){
int number[MAX] = {0};
int i;
srand(time(NULL));
printf("排序前: \n");
for(i = 0; i < MAX; i++){
number[i] = rand() % 100;
printf("%d ", number[i]);
}
shellsort(number);
// system("pause");
return 0;
}
void shellsort(int number[]){
int i, j, k, gap, t;
gap = MAX / 2;
printf("\n排序后: \n");
while(gap > 0){
for(k = 0; k < gap; k++){
for(i = k + gap; i < MAX; i += gap){
for(j = i - gap; j >= k; j -= gap){
if(number[j] > number[j + gap]){
SWAP(number[j], number[j + gap]);
}
else{
break;
}
}
}
}
printf("\n gap = %d: ", gap);
for(i = 0; i < MAX; i++){
printf("%d ", number[i]);
}
printf("\n");
gap /= 2;
}
}