内部排序
一、插入排序
例如一个乱序的数组:49 65 97 38 13 (a[4])
第一趟:(49 65) 97 38 13
第二趟:(49 65 97) 38 13
第三趟:(38 49 65 97)13
第四趟:(13 38 49 65 97)
优化代码->采用了折半排序
void BInsertSort(SqList &L)
{
for(i = 2;i<=n;i++)
{ a[0] = a[i];
low =1;
high = i-1;
while(low<=high){
mid = (high+low)/2;
if (a[mid]<a[0]) low = mid+1;
else hight = mid-1;
}
for (j=i-1;j>high+1;--j)
a[high+1] = a[0];
}//for
}
二、希尔排序
例如一个乱序的数组:49 65 97 38 13 (a[4])
一开始使用间隔进行块排序,在这里有5个数,所以一开始的间隔为dk=5/2=2
排序过程如下:
①dk=2
第一趟:13 38 49 65 97
提示:da是逐渐减半的
void shellInsert(int a[],int dk)
{
for( i = dk+1;i<m;i++)
if(a[i]<a[i-dk])
{
a[0]=a[i];
for ( j=i-dk;j>0&&a[j]>a[0];j-=dk)
a[j+dk] =a[j]; //将大一点的数值后移,前一个数字和自己一样大小
a[j+dk] = a[0]; //将储存的较小数值赋插入
}
}
void ShellSort(int a[],int ak,int n){
for(k =n/2;k<n;k=k/2) //选择间隔大小;
shellInsert(a,ak);
}
三、快速排序
四、选择排序
1.堆排序
五、归并排序
六、基数排序
总结
提示:这里对文章进行总结: