常用算法执行中的数据比较次数和数据移动次数来衡量。
01.12.2020
6
为简单起见,数据的存储结构采用记录数组形式, 同时假定关键字是整数。记录数组的类型说明如下:
Typedef int KeyType typedef struct { KeyType key;
int other; } DataType; DataType R[n];
如:2, 2*,1,排序后若为1, 2*, 2 则该排序方法是不稳 定的。在应用排序的某些场合,如选举和比赛等,对排序 的稳定性是有特殊要求的。
▪内排序与外排序 :排序过程是否全部在内存进行。
(区分标准)
01.12.2020
5
▪ 排序的方法有很多,但简单地判断那一种算法最好,以 便能够普遍选用则是困难的。
比较
while (R[0].key<R[j].key) R[j+1]=R[j- -];
先后移,再j-1
R[ j+1]=R[0];
插入
}
}
01.12.2020
14
R[0]有两个作用:
其一: 是进入查找循环之前,保存 R[i] 的副本,使之不 至于因记录的后移而丢失R[i]中的内容;
其二: 是在 while 循环时,“监视”下标变量 j 是否越 界,一旦 越界(j<1),R[0]自动控制while循环的结束, 从而避免了在while 循环内的每一次都要检测 j 是否越 界( 即省略了循环条件j > -1)。
10
直接插入排序算法
InsertSort(DataType R[],int n) { int i,j;
DataType temp; for (i=0;i<n-1;i++) //n-1次 { temp=R[i+1];