希爾排序是直接插入排序的優化。比較次數和插入次數應該都會變小。
#include <stdio.h>
#include <stdlib.h>
void swap(int arr[] ,int i, int j)
{
int temp;
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
void ShellSort(int arr[], int n)
{
int i;
int increment = n/2;
while(increment != 0)
{
for(i=increment; i<n; i++) //循環從第2個數組元素開始,移位arr[0]作為最初已排序部分
{
int j;
int temp = arr[i];
for(j=i-increment; j>=0 && arr[j]>temp; j=j-increment)
arr[j+increment] = arr[j];
arr[j+increment] = temp;
}
increment = increment/2;
}
}
void print(int arr[], int n)
{
int i;
for(i=0; i<n; i++)
{
printf("%d ",arr[i]);
}
printf("\n");
}
int main()
{
int arr[]={9, 1, 5, 8, 3, 7, 4, 6, 2};
int n = sizeof(arr)/sizeof(arr[0]);
printf("排序前:\n");
print(arr, n);
ShellSort(arr,n);
printf("排序後:\n");
print(arr, n);
system("pause");
return 0;
}
本文出自 “李海川” 博客,請務必保留此出處http://lihaichuan.blog.51cto.com/498079/1282211