一、分析
- 把希尔排序比作给人的身高排序
- 注意:
- 每次分组后,组内都是使用插入排序法进行排序
二、代码
#include<stdio.h> #define max 100 //数组大小; void ShellSort(int a[],int n) { //分组:以数组长度/2为起始分组点 //循环结束执行delta/2:再一次分组 for(int delta=n/2;delta>0;delta/=2) { //组内排序:排序方式为插入方式 //i++:就到了下一组 for(int i=delta;i<n;i++) { int temp=a[i]; for(int j=i-delta;j>=0;j-=delta) { if(temp<a[j]) a[j+delta]=a[j]; else break; } a[j+delta]=temp; } } } int main(void) { int a[max]; int n; //输入数据个数; printf("输入数据个数: "); scanf("%d",&n); printf("输入数组元素值: \n"); for(int i=0;i<n;i++) scanf("%d",&a[i]); ShellSort(a,n); //输出排序之后的数据序列; for(i=0;i<n;i++) printf("%d ",a[i]); printf("\n"); return 0; }