几大排序算法理解
Posted SO_N_Y
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了几大排序算法理解相关的知识,希望对你有一定的参考价值。
1.插入排序算法
跟我们平时打扑克时排序相似,左手先拿起一张牌,不需要比较,当拿起第二张牌时需要和之前的牌进行比较,如果小于之前的牌i,并且有大于牌i-1时,i就是该张牌要插入的位置,牌i及其以后的牌需要给它腾位置 a[k+1] = a[k];腾好位置之后就把它插入到i的位置即可。
实现算法:
void InsertSort(int s[],int n) { int i, j, k; for(i = 1;i<n;i++) { //为a[i]在前面的a[0...i-1]有序区间中找一个合适的位置(从前到后) for(j=i-1;j>=0;j--) if(s[j]<s[i]) break; //如找到了一个合适的位置 if(j != i-1) { //将比a[i]大的数据向后移 int temp = s[i]; for(k = i-1;k>j;k--) s[k+1] = s[k]; //将a[i]放到正确位置上 此时的k = j,故s[j+1] = temp更方便理解 s[k +1] = temp; } } }
2.快速排序
分区排序思想,首先选取一个元素,把所有元素分成比它小(左边)和比它大(右边)两部分,然后再对左右两边进行递归。
算法实现:
void QuickSort(int s[], int l, int r) { if (l < r) { int i = l, j = r, x = s[l]; while (i < j) { while (i < j && s[j] >= x) j--; if (i < j) s[i++] = s[j]; while (i < j && s[i] < x) i++; if (i < j) s[j--] = s[i]; } s[i] = x; QuickSort(s, l, i - 1); QuickSort(s, i + 1, r); } };
以上是关于几大排序算法理解的主要内容,如果未能解决你的问题,请参考以下文章