2-路插入排序c语言算法,浅谈2路插入排序算法及其简单实现
2路插入排序算法是在直接插入排序算法的基礎上增加了一個輔助數組,其目的是減少排序過程中的移動次數,需要增加n個記錄的輔助空間。
難點可能在于對取余的考慮吧,可以把輔助數組看成一個環狀空間,這樣就能更好的理解輔助空間中最大值和最小值的位置了。
算法整體思想還是很簡單的,直接貼出可運行代碼,注釋還是挺清楚的,大家直接看就ok了
C語言實現示例
#include #include void insert_sort(int *arr, int *temp, int n) { int i, first, final, k; first = final = 0; temp[0] = arr[0]; for (i = 1; i < n; i ++) { if (arr[i] < temp[first]) { // 待插入元素比最小的元素小 first = (first - 1 + n) % n; temp[first] = arr[i]; } else if (arr[i] > temp[final]) { // 待插入元素比最大元素大 final = (final + 1 + n) % n; temp[final] = arr[i]; } else { // 插入元素比最小大,比最大小 k = (final + 1 + n) % n; while (temp[((k - 1) + n) % n] > arr[i]) { temp[(k + n) % n] =temp[(k - 1 + n) % n]; k = (k - 1 + n) % n; } temp[(k + n) % n] = arr[i]; final = (fianl + 1 + n) % n; } } // 將排序記錄復制到原來的順序表里 for (k = 0; k < n; k ++) { arr[k] = temp[(first + k) % n]; } } int main(void) { int i, n, *arr, *temp; while (scanf("%d", &n) != EOF) { arr = (int *)malloc(sizeof(arr) * n); temp = (int *)malloc(sizeof(temp) * n); for (i = 0; i < n; i ++) scanf("%d", &arr[i]); insert_sort(arr, temp, n); for (i = 0; i < n; i ++) printf("%d ", arr[i]); printf("n"); free(arr); free(temp); } return 0; }
同時附上C++寫法:
#includeusing namespace std;#define MAX 20void PrintArray(int a[],int len){ for(int i=0;i=d[final]){ final=final+1; d[final]=a[i]; } else{ int j=final++; while(a[i]>len; cout<>a[i]; BinInsertSort(a,len); system("pause"); return 0;}
【淺談2路插入排序算法及其簡單實現】相關文章:
總結
以上是生活随笔為你收集整理的2-路插入排序c语言算法,浅谈2路插入排序算法及其简单实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 同比 数据模型 环比_历史数据模型解决方
- 下一篇: ubuntu 改linux密码忘了怎么办