赞
踩
快速排序法原理也是用了分治法,主要原理是将数组分为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;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。