每天一个小程序(15)——交换排序之快速排序
来源:互联网 发布:c语言初始化程序 编辑:程序博客网 时间:2024/05/22 03:26
快速排序法原理也是用了分治法,主要原理是将数组分为A[p..q-1] 和A[q+1..r],然后调整元素使得A[p..q-1]小于等于q,也小于等于A[q+1..r]。然后不断的递归,到最后就排序完成。
通俗的话语讲就是,排序之前选择一个标志数据(一般选择最后一个),然后第一次排序中,以此标记数据为基准,小于它的放在“小数据区”,比如左半边区,大于它的放在“大数据区”,比如右半边区,然后得到中间的位置,以此位置将程序分为宏观有序(左半边区之和小于右半边区)的两部分,再通过第一步的方法,将这两部分再分成宏观有序的四部分,最后直到不能再继续分位置,则该序列有序。
#include<stdio.h>void QuickSort(int *A, int p, int r);int Partition(int *A, int p, int r);void Display(int *A){for(int i = 0; i < 20; i++){printf("%d ",A[i]);}}void main(){int A[] = {5,4,7,1,13,0,322,92,35,19,3,78,-32,45,77,43,933,8,49,11};QuickSort(A,0,19);Display(A);}void QuickSort(int *A, int p, int r){int q;if(p < r){q = Partition(A,p,r);QuickSort(A,p,q - 1);QuickSort(A,q + 1,r);}}int Partition(int *A, int p, int r)//分治法,作用就是将数组分为A[p..q-1] 和A[q+1..r] {int x,i,j,temp;x = A[r];i = p - 1;for(j = p; j <= r - 1; j++)//以A[r]为判断标准,然后调整元素使得A[p..q-1]小于等于A[r],也小于等于A[q+1..r] {if(A[j] <= x)//交换{i += 1;temp = A[i];A[i] = A[j];A[j] = temp;}}temp = A[i + 1];//交换A[i + 1] = A[r];A[r] = temp;return i+1;}
0 0
- 每天一个小程序(15)——交换排序之快速排序
- 每天一个小程序(16)——交换排序之快速排序2
- 每天一个小程序(12)——交换排序之冒泡排序
- 每天一个小程序(14)——交换排序之双向冒泡排序
- 每天一个C++小程序(十五)--快速排序
- 每天一个c++小程序(1):快速排序
- 每天一个小程序(19)——选择排序
- 交换排序—快速排序
- 每天一个java小程序之冒泡排序
- 每天一个小算法之Shell排序(希尔排序)
- 排序——交换排序之快速排序
- 每天一个小程序(10)——直接插入排序
- 每天一个小程序(11)——折半插入排序
- 算法分析之排序:交换排序之二——快速排序(QuickSort)
- 每天一个C++小程序(十四)--堆排序
- 每天一个C++小程序(十八)--插入排序
- 每天一个C++小程序(十九)--桶排序
- 交换排序(冒泡排序—改进、快速排序)
- Windows核心编程(九)同步设备I/O
- 用通俗易懂的大白话讲解Map/Reduce原理
- 我的第一篇blog
- licencefilepath =E:/tomcat7/wtpwebapps/cms3/data/fsmlicence/
- 信息检索作业
- 每天一个小程序(15)——交换排序之快速排序
- SSIS Package Development - Issues and Solutions
- Ubuntu12.10下安装lighttpd1.4.32详细步骤
- Ipad air里面的照片能恢复吗
- [递归]UVA11129 An antiarithmetic permutation
- java中内存泄露
- JS调用后台函数
- 使用AGSJSONRequestOperation完成webservice资源的请求
- 推荐一个文献管理工具--Paperbox