Quick Sort
一种类似于冒泡排序的排序算法;并对冒泡排序进行了改进,基于交换排序思想。
快速排序算法通过多次比较和交换来实现排序,其排序流程如下:
1:首先设定一个分界值,通过该分界值将数组分成左右两个部分。
2:将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数据的左边。此时,左边部分中各元素都小于等于分界值,而右边部分中各元素都大于等于分界值。
3:然后,左边和右边的数据可以独立排序。对于左侧的数组数据,,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧数据也可以做类似处理。
4:重复上述过程,可以看出,这是一个递归定义。通过递归将左侧部分排好序后,再递归排好右侧部分的数据。当左、右两个部分各数据排序完成后,整个数组的排序也就完成了。
#include<stdio.h> #include<stdlib.h> #include<time.h> #define SIZE 10 void QuickSort(int *a,int l,int r) { int temp; int i=l,j=r; if(l<r) { temp=a[l]; while(i!=j) { while(j>i&&a[j]>temp) --j; if(i<j) { a[i]=a[j]; ++i; } while(i<j&&a[i]<temp) ++i; if(i<j) { a[j]=a[i]; --j; } } a[i]=temp; QuickSort(a,l,i-1); QuickSort(a,i+1,r); } } int main() { int i; int shuzu[SIZE]; srand(time(NULL)); for(i=0;i<SIZE;i++) shuzu[i]=rand()/1000+100; printf("排序前的数组为:\n"); for(i=0;i<SIZE;i++) printf("%d ",shuzu[i]); printf("\n"); QuickSort(shuzu,0,SIZE-1); printf("排序后的数组为:\n"); for(i=0;i<SIZE;i++) printf("%d ",shuzu[i]); printf("\n"); return 0; }