Quick sort 快速排序
2015-09-10 08:32
309 查看
维基百科快速排序:https://en.wikipedia.org/wiki/Quicksort
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
排序动画:
示例:
总结分为三步:
1)先从数列中取出一个数作为基数。
2)将比这个数大的数全部放到右边,小于等于它的数全部放在左边。
3)再对左右区间重复第二步,直到各个区间只剩下一个数。
代码:
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
排序动画:
示例:
总结分为三步:
1)先从数列中取出一个数作为基数。
2)将比这个数大的数全部放到右边,小于等于它的数全部放在左边。
3)再对左右区间重复第二步,直到各个区间只剩下一个数。
代码:
#include <stdio.h> void quick_sort(int n[], int left, int right) { int i = left; int j = right; int temp = n[left]; //base number if (left < right) { while(i < j) { while(i < j && n[j] >= temp) //find less than temp number form right to left j--; if (i < j) { n[i] = n[j]; i++; } while(i < j && n[i] < temp) //find big than temp number form left to right i++; if (i < j) { n[j] = n[i]; j--; } } n[i] = temp; //swap base number quick_sort(n, left, i - 1); quick_sort(n, i + 1, right); } } int main() { int number[] = {3, 7, 8, 5, 2, 1, 9, 5, 4}; int len; int i; len = sizeof(number)/sizeof(number[0]); quick_sort(number, 0, len - 1); printf("\n"); for (i = 0; i < len; i++) { printf("%d ", number[i]); } printf("\n"); }
相关文章推荐
- ajax2.guestbook.js
- Android studio 新建项目\values-v23\values-v23.xml报错
- iOS开发之UITableView全面解析
- UVA1608_Non-boring sequences
- WDK-build 添加Listing file type:assembly,Machine Code,and Source
- 条款20:宁以pass-by-reference-to-const替换pass-by-value(Prefer pass-by-reference-to-const to pass-by-value)
- Uva-12166 Equilibrium Mobile
- UITableView使用<1>之自定义UITableViewCell
- UIview 动画实现
- android 学习 在子线程中更新UI
- UIView的一些常用属性
- Xcode Server Tutorials: 3. Prebuild & Postbuild Scripts
- String,StringBuffer与StringBuilder的取舍
- hdu 5412 CRB and Queries
- UI:UITableView表视图
- UI线程阻塞及优化
- UIAlertView+Blocks.h
- 新人与三年经验的交互设计师有多大的差距?
- UI设计师是混哪一块?要做什么?图文结合详解
- 完整的交互设计流程应该是怎样的?