插入排序
插入排序
实现原理:
插入排序是在插入的过程中,逐渐将范围不断扩大的排序方法,例如先从数组下标为1的元素开始,比较1所在的元素和0所在元素的大小。如果满足条件(按升序排列)就把1和0位置所在的元素元素进行交换,第一次比较结束。然后从2开始,先是2和1比较,满足就交换,不满足就不变,再是1和0比较,再重复之前的过程,第二次比较结束。然后从3一直到N-1。从这块我们可以看到,插入排序是将有序的范围逐渐扩大,也就是说当每一次比较结束时,前面的已经排好序了。
主要代码如下:
1 /*bool sort(int n) {//插入排序 2 for (int i = 1;i < n;i++) 3 for (int j = i;j > 0 && compare(j, j - 1);j--) 4 exchange(j, j - 1); 5 return true; 6 }*/ 7 //--------------------------------------------- 8 /*bool Sort::compare(int i, int j) {//比较两个数组元素大小 9 return a[i] < a[j] ? true : false; 10 }*/ 11 //---------------------------------------------- 12 /*bool Sort::exchange(int i,int j) {//交换两个数组元素的位置 13 int tmp = 0; 14 tmp = a[i]; 15 a[i] = a[j]; 16 a[j] = tmp; 17 return true; 18 }*/
插入排序代分析:
对于大部分有序的数组而言,使用插入排序是比较好的选择。因为如果大部分有序的话,交换的次数就会非常少,最好情况(数组已有序)比较次数为N-1交换次数为0。所以就会非常节省运行时间。最坏情况就是数组是逆序的,比较次数为N*N-1,交换次数为N*N-1。