每天一个小程序(15)——交换排序之快速排序
2014-03-31 16:22
239 查看
快速排序法原理也是用了分治法,主要原理是将数组分为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; }
相关文章推荐
- 每天一个小程序(16)——交换排序之快速排序2
- 每天一个小程序(12)——交换排序之冒泡排序
- 每天一个C++小程序(十五)--快速排序
- 每天一个小程序(10)——直接插入排序
- 每天一个c++小程序(1):快速排序
- 每天一个小程序——选择排序时的一个小问题!
- Java程序排序之交换排序
- Python练习册,每天一个小程序
- 每天一个linux命令(15):whereis 命令
- 每天一个OpenGL程序,第一篇弹性的小矩形
- 写一个程序每天把天气预报发送到手机
- 快速排序不是一个稳定的排序
- 【郝斌数据结构自学笔记】75-78_链式二叉树遍历具体程序演示_5种常用排序概述和快速排序详细讲解_再次讨论什么是数据结构_再次讨论到底什么是泛型
- 【数据结构】排序算法(二)之交换排序之快速排序(QuickSort)
- 【交换排序】快速排序
- 每天一个py小程序 001生成激活码
- 一个快速排序程序
- 每天一个linux命令(15):tail 命令
- 经过漫长的试验,我终于写成一个简单的快速排序程序了。 4000
- 每天一个java小程序-6