快速排序
快速排序是对冒泡排序的一种改进,通过一个分界值将数组分成左右两部分,大于等于分界值的元素集中到右边,小于分界值的元素集中到数组左边。对于左右两边的元素又可以取一个分界值继续进行排序,通过递归将左右两侧排好序后,即完成整个数组的排序。
#include <stdio.h>
#include <time.h>
static void QuickSort(int *shuzu,int left,int right);
void main()
{
system("clear");
int i=0;
int shuzu[11];
srand((unsigned int)time(NULL));
for(i=0;i<=10;i++)
{
shuzu[i]=rand()%100;
}
printf("Original is \n");
for(i=0;i<=10;i++)
{
printf("%d ",shuzu[i]);
}
printf("\n\n\n");
QuickSort(shuzu,0,10);
printf("\nafter QuickSort \n");
for(i=0;i<=10;i++)
{
printf("%d ",*(shuzu+i));
}
printf("\n");
}
static void QuickSort(int *shuzu,int left,int right)
{
int f=0,l=0,r=0,t=0,i=0;
l=left;
r=right;
f=shuzu[(left+right)/2];
while(l<r)
{
while(shuzu[l]<f) ++l;
while(shuzu[r]>f) --r;
if(l<=r)
{
t=shuzu[l];
shuzu[l]=shuzu[r];
shuzu[r]=t;
++l;
--r;
}
}
if(l==r) l++;
if(left<r) QuickSort(shuzu,left,l-1);
if(l<right) QuickSort(shuzu,r+1,right);
}
快速排序与冒泡排序比较视频: http://www.tudou.com/v/htKY1-Rj9ZE