47. //ShellInsertSort(a,8,1); //直接插入排序
48. shellSort(a,8); //希尔插入排序
49. print(a,8,8);
50. }
希尔排序时效分析很难,关键码的比较次数与记录移动次数依赖于增量因子序列d的选取,特定情况下可以
准确估算出关键码的比较次数和记录的移动次数。目前还没有人给出选取最好的 增量因子序列的方法。 增
量因子序列可以有各种取法,有取奇数的,也有取质数的,但需要注意: 增量因子中除1 外没有公因子,且
最后一个 增量因子必须为1。希尔排序方法是一个不稳定的排序方法。
3. 选择排序—简单选择排序(Simple Selection Sort)
基本思想:
在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换;然后在剩下的数当中再找最
小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最
后一个数)比较为止。
简单选择排序的示例:
操作方法:
第一趟,从n 个记录中找出关键码最小的记录与第一个记录交换;
第二趟,从第二个记录开始的n-1 个记录中再选出关键码最小的记录与第二个记录交换;
以此类推.....
第i 趟,则从第i 个记录开始的n-i+1 个记录中选出关键码最小的记录与第i 个记录交换,
直到整个序列按关键码有序。
算法实现:
01. void print(int a[], int n ,int i){
02. cout< span style='font-size:12px;font-style:normal;font-weight:normal;font-family:Consolas, ' Courier Ne
w Courier mono serifcolorrgb >"第"< ispan>"趟 : ";
03. for(int j= 0; j<8 jspan>
04. cout< aj>< span style='font-size:12px;font-style:normal;font-weight:normal;font-family:Consolas, ' Co
urier New Courier mono serifcolorrgb >" ";
05. }
06. cout< endl>
07. }