每天一个小程序(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
原创粉丝点击