C实现三种插入排序-简单插入排序、二分插入排序、希尔插入排序
2014-11-25 19:23
288 查看
想必各种数据结构和算法的书上均有相关的介绍。我就在啰嗦一下,随便侃侃,各位有砖扔砖,没砖低头找找。
1、 简单插入排序。最原始的插入排序,不多说,直接上码。
2、二分插入排序——各位应该听得耳朵茧子都有。这个算法,是对于简单排序排序算法的优化,优化的什么呢——当然是加快查找被插入元素的位置!省去多次的比较
3、希尔插入排序。这个我不是很清楚该算法优化的是哪个方面,不过对于大数组来说应该效率要好些。因为它是逐渐有序的,越往后面,需要进行交换和比较的次数相对少一些,而上面两个往后面,交换的次数会越来越多。就扯这么多,上码。
1、 简单插入排序。最原始的插入排序,不多说,直接上码。
void insertSort(int *array,int len) { if(NULL == array|| 1 == len) return; //检测还是要的 int i,j; for(i = 1;i<len;i++) //这里只需要记得需要插入多少个就行,显然插入len-1个元素,把第一个当成有序数组(也是插入排序的核心思想) { if(array[i - 1]>array[i]) { int temp = array[i]; for(j = i -1;array[j] > temp;j--) { array[j + 1] = array[j]; } array[j+1] = temp; } } }
2、二分插入排序——各位应该听得耳朵茧子都有。这个算法,是对于简单排序排序算法的优化,优化的什么呢——当然是加快查找被插入元素的位置!省去多次的比较
void biInsertSort(int *array,int len) { if(NULL == array|| 1 == len) return; int i,j; for(i = 1;i<len;i++) { if(array[i - 1]>array[i]) { int temp = array[i]; int low = 0; int high = i - 1; while(low<high) //就是这儿,优化一下,总是好的 { int mid = (low + high)/2; if(array[mid] > temp) { high = mid - 1; }else{ low = mid + 1;//注意这个地方,可不是low = mid,因为我们不是要查找相等的元素(与二分查找还是有区别的) } } for(j = i - 1;j >= low;j--) { array[j + 1] = array[j]; } array[low] = temp; } } }
3、希尔插入排序。这个我不是很清楚该算法优化的是哪个方面,不过对于大数组来说应该效率要好些。因为它是逐渐有序的,越往后面,需要进行交换和比较的次数相对少一些,而上面两个往后面,交换的次数会越来越多。就扯这么多,上码。
void shellSort(int *array,int len,int dk) { if(NULL == array|| 1 == len) return; int i,j; for(i = dk;i<len;i++) { if(array[i - dk]>array[i]) { int temp = array[i]; for(j = i - dk;(j>=0)&&(array[j]>temp);j-=dk) { array[j + dk] = array[j]; } array[j+dk] = temp; } } } void ShellSort(int *array,int len,int dk) { int i; for(i = dk;i>0;i--) { shellSort(array,len,i); } }
相关文章推荐
- 三种简单排序用java实现(选择排序,冒泡排序,插入排序)
- 冒泡排序,简单插入排序,快速排序,二分查找的JAVA实现
- 内部排序之插入排序(直接插入排序,二分插入排序,希尔插入排序)
- 数据结构-排序算法之插入排序(直接插入,二分插入,希尔,表插入)
- 插入排序优化:简单插入排序->二分查找插入排序->二路插入排序->shell插入排序
- 数据结构图文解析之:直接插入排序及其优化(二分插入排序)解析及C++实现
- 三种常用的插入排序算法--直接插入排序、二分插入排序、希尔排序
- C语言实现 排序源程序(包括直接插入、希尔、冒泡、快速、简单选择、堆排序)
- java实现三种简单排序以及改良:冒泡排序,选择排序,直接插入排序
- java实现七种排序 (插入排序, 希尔排序, 插入排序, 快速排序, 简单选择排序, 堆排序, 归并排序)
- C语言实现 排序源程序(包括直接插入、希尔、冒泡、快速、简单选择、堆排序)
- 三种简单排序的实现(冒泡排序,选择排序,插入排序 )
- 白话经典算法系列之二 直接插入排序的三种实现
- 【转载】白话经典算法系列之二 直接插入排序的三种实现
- 插入排序 二分插入排序 学习
- 白话经典算法系列之二 直接插入排序的三种实现
- 三种插入排序的分析(直接插入-二分插入-Shell排序)
- 白话经典算法系列之二 直接插入排序的三种实现
- 插入排序的简单实现
- 白话经典算法系列之二 直接插入排序的三种实现 .