插入排序是很常见的排序方式,通常我们使用的插入排序有下面几种:
1、直接插入排序
算法思想:第 i 趟插入排序为:在含有i-1个元素的有序子序列中插入一个元素,使其成为含有i个元素的有序子序列。在查找插入位置的过程中,可以同时后移元素。整个过程进行n-1趟插入,即先将整个序列的第1个元素看成是有序的,然后从第2个元素起逐个进行插入,直至整个序列有序。
1 void directInsertSort(int Arr[], int n) 2 { 3 int i, j, temp; 4 for (i = 1; i<n-1; i++) 5 { 6 if(Arr[i] < Arr[i-1]) 7 { 8 j = i - 1; 9 temp = A[i]; 10 while(j >= 0 && temp < Arr[j]) 11 { 12 Arr[j+1] = Arr[j]; 13 j--; 14 } 15 Arr[j+1] = temp; 16 } 17 } 18 }
2、折半插入排序
算法思想:插入思想同直接插入排序,但寻找查找位置使用折半查找法。
1 void BinInsertSort(int Arr[], int n) 2 { 3 int i, j, low, high, mid, temp; 4 for(i = 1; i <= n-1; i++) 5 { 6 temp = Arr[i]; 7 low = 0; 8 high = i - 1; 9 while(low <= high) 10 { 11 mid = (low + high)/2; 12 if(temp > Arr[mid]) 13 low = mid - 1; 14 else 15 high = low + 1; 16 } 17 for(j = 1; j > low; j--) 18 Arr[j] = Arr[j-1]; 19 } 20 }
作者:耑新新,发布于 博客园
转载请注明出处,欢迎邮件交流:zhuanxinxin@aliyun.com