#include <stdio.h>
//排序
//稳定性:针对关键字相同的数据,在排序前A在A'的前面,排序后依然如此,则稳定,否则不稳定
//出现跳跃的交换数据则不稳定
//插入排序的最大特点:越有序越快,完全有序则为O(n)
//一趟shell过程
void Shell(int *arr,int len,int gap)
{
int tmp;
int i;
int j;
for(i=gap;i<len;i++)
{
tmp = arr[i];
for(j=i-gap;j>=0;j-=gap)
{
if(arr[j] <= tmp)
{
break;
}
else
{
arr[j+gap] = arr[j];
}
}
arr[j+gap] = tmp;
}
}
void ShellSort(int *arr,int len)//时间复杂度O(n^1.3)~O(n^1.5),空间复杂度O(1),不稳定
{
int d[] = {5,3,1};
for(int i=0;i<sizeof(d)/sizeof(d[0]);i++)
{
Shell(arr,len,d[i]);
}
}
void Show(int *arr,int len)
{
for(int i=0;i<len;i++)
{
printf("%d ",arr[i]);
}
printf("\n");
}
int main()
{
int arr[] = {4,9,0,12,34,67,8,91,32,54,66,88,2};
ShellSort(arr,sizeof(arr)/sizeof(arr[0]));
Show(arr,sizeof(arr)/sizeof(arr[0]));
return 0;
}
Shell排序,又叫希尔排序
最新推荐文章于 2022-02-24 15:30:24 发布