#include <stdio.h>
/*
*直接插入排序,从数列左边开始排序,每往右移动一次,若数小于现在数列
*最右边的数,则进行重新排序,先前的序列已经是有序化的。
*/
void insert_sort(int *arr,int n)
{
int i=0,j=0,temp=0;
for(i=1;i<n;i++)
{
if(arr[i]<arr[i-1])
{
temp=arr[i];
for(j=i-1;j>=0 && arr[j]>temp;j--)
{
arr[j+1]=arr[j];
}
arr[j+1]=temp;
}
}
}
void shell_sort(int *arr,int n)
{
int i=0,j=0,temp=0;
int gap=n;
do
{
gap=gap/3+1;//设置步进
for(i=gap;i<n;i++)
{
if(arr[i]<arr[i-gap])
{
temp=arr[i];
for(j=i-gap;j>=0 && arr[j]>temp;j-=gap)
{
arr[j+gap]=arr[j];
}
arr[j+gap]=temp;
}
}
}while(gap>1);
}
int main(int argc,char **argv)
{
int arr[]={45,23,65,9,435,12};
int i=0;
shell_sort(arr,6);
for(;i<6;i++)
printf("%d ",arr[i]);
printf("\n");
return 0;
}
直插排序
最新推荐文章于 2021-04-14 21:30:16 发布