几种排序算法的总结算法
最近复习了一下数据结构,下面把几种排序算法总结一下。数组
一、直接插入排序数据结构
插入排序相似于咱们平时打扑克时给扑克排序。好比要插入第i个元素,第1个到第i-1个元素已经排序好了,那就将第i个元素与第i-1个,i-2个......进行比较,选在适当的地方插入,而后将后面的数依次后移。ide
如下是代码实现:ui
假定要对v[length-1]中的数组进行排序。spa
- for(int i = 0; i < length; i++){
- key = v[i];
- for(int j = i - 1; j >= 0 && v[j] > key; j --)
- v[j+1] = v[j];
- v[j] = key;
- }
二、折半插入排序。排序
折半插入排序就是利用二分搜索法进行寻找v[i]的位置,而后插入相应位置。it
如下是代码实现:io
- int low = 0, high = length-1;
- for(int j = 0; j < length; j++){
- for(int i = low; i <= high && low < high; i++){
- middle = (low + high)/2;
- if(v[j] < v[middle])
- high = middle - 1;
- else
- low = middle + 1;
- }
- for(int m = length-1; m > low; m--)
- v[m+1] = v[m];
- v[m] = v[j];
- }
三、快速排序class
快速排序的核心思想是随机选择一个基准量,而后将全部的数分红两个子序列,小于基准量的为一个子序列,非小于基准量的为另一个子序列。而后再分别对子序列进行重复以上的操做。直到全部的数都排到了相应的位置上。
如下是代码实现:
- void quickSort(Vector v, int left, int right){
- if(left < right){
- int standardpos = v.partition(left,right);
- quickSort(V,left,standardpos - 1);
- quickSort(standardpos + 1, right);
- }
- }
- int paritition(int left, int right){
- standardpos = left;
- key = v[left];
- for(i = left; i <= right; i ++){
- if(v[i] < standard){
- standardpos ++;
- swap(v[standardpos],v[i]);
- }
- }
- v[left] = v[standardpos];
- v[standardpos] = key;
- }
四、 选择排序
选择排序就是依次选取最小的值放在相应的位置。
如下是相应的代码实现:
- for(int i = 0; i < length; i++){
- k = i;
- for(int j = i+1; j < length; j++){
- if(v[j] < v[k]) k = j;
- }
- if(i != k) swap(v[i],v[k]);
- }