双向插入排序的算法及实现
来源:爱站网时间:2020-11-28编辑:网友分享
排序在计算机程序的设计中是很重要的操作,而随着互联网的发展我们又发现了双向插入排序的新算法,下面就让爱站技术频道小编带我们一起来了解双向插入排序的算法及实现吧!
排序在计算机程序的设计中是很重要的操作,而随着互联网的发展我们又发现了双向插入排序的新算法,下面就让爱站技术频道小编带我们一起来了解双向插入排序的算法及实现吧!
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 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
同时附上C++写法:
#includeusing namespace std; #define MAX 20 void 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; }
上文便是爱站技术频道小编介绍的双向插入排序的算法及实现,学习可以给我们带来欢乐,如果你也想学习的话,不防收藏js.aizhan.com吧!
上一篇:详解在C语言中的贪婪算法
下一篇:教你使用C语言解决字符串排列