常见排序算法之插入排序
2016-08-20 21:05
183 查看
1.直接插入排序
直接插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止。
设数组为a[0…n-1]。
1. 初始时,a[0]自成1个有序区,无序区为a[1..n-1]。令i=1
2. 将a[i]并入当前的有序区a[0…i-1]中形成a[0…i]的有序区间。
3. i++并重复第二步直到i==n-1。排序完成。
代码如下:
void InsertSort(int* a, size_t n) //直接插入排序 { assert(a); for (int i = 1; i < n; ++i) { int tmp = a[i]; int j = i - 1; while (j >= 0 && a[j] > tmp) { a[j + 1] = a[j]; --j; } a[j + 1] = tmp; } }
2.希尔排序
该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率上比前两种方法有较大提高。
void shellsort2(int a[], int n) { int j, gap; for (gap = n / 2; gap > 0; gap /= 2) for (j = gap; j < n; j++)//从数组第gap个元素开始 if (a[j] < a[j - gap])//每个元素与自己组内的数据进行直接插入排序 { int temp = a[j]; int k = j - gap; while (k >= 0 && a[k] > temp) { a[k + gap] = a[k]; k -= gap; } a[k + gap] = temp; } }
相关文章推荐
- OC学习之道:数据结构中几种常见的排序算法:选择排序,插入排序.快速排序
- 几种常见排序算法之Java实现(插入排序、希尔排序、冒泡排序、快速排序、选择排序、归并排序)
- 【Data_Structure笔记3】排序算法之插入排序常见的三种算法
- 算法 排序 python 实现--插入排序
- Algorithms - 排序算法之一:插入排序
- 算法学习笔记之排序--基于值的插入排序
- 常见算法基础之排序
- 每天一个排序算法之插入排序
- 数据结构&算法实践—【排序|插入排序】插入排序
- 排序算法之一——插入排序
- 几种基本的排序算法:选择排序、插入排序、冒泡排序
- 几种常见的排序(插入排序)
- 插入排序,合并排序,堆排序,快速排序,计数排序的实现(算法导论)
- 常见算法:C语言中的排序算法--冒泡排序,选择排序,希尔排序
- 有意思的排序算法-插入排序
- 基础算法之四--排序: 之插入排序
- 【转】几种常见的排序算法之比较
- 几种常见的排序算法之比较
- 【排序】排序算法之插入排序
- java基本算法总结(冒泡排序、选择排序、插入排序)