快速排序

快速排序关键点就是找到基准点所在的位置,并使基准点位置左边的都小于或等于这个值;右边的都大于或等于这个值。
就是说对序列的划分是个关键的步骤,看发布的代码大都是通过首尾两个索引值向中间移动,通过交换数据,找到基准点的位置。

#include <cstdio>
#include <cstdlib>
#include <ctime>
int partition(int A[],int begin,int end)
{
int r = end;
int i=begin-1,j=begin;
int temp;
while(j<end)
{
   if (A[j]<A[r])
   {
    i++;
    if (i!=j)
    {
     temp = A[i];
     A[i] = A[j];
     A[j] = temp;
    }
   }
   j++;
}
if (i+1!=r)
{
        temp = A[i+1];
   A[i+1] = A[r];
   A[r] = temp;
}
return i+1;
}
void Qsort(int A[],int begin,int end)
{
if (begin<end)
{
    int q = partition(A,begin,end);
   Qsort(A,begin,q-1);
   Qsort(A,q+1,end);
}
}
int main()
{
int data[10],i;//设置10个数据排序
srand(time(NULL));//设置随机数种子
for (i=0;i<10;i++)//随机生成0-99之间的10个数进行排序,可以重复
{
   data[i] = rand()%100;
}
for (i=0;i<10;i++)//输出未排序数据
{
   printf("%d ",data[i]);
}
printf("\n");
Qsort(data,0,9);
for (i=0;i<10;i++)//输出排序数据
{
   printf("%d ",data[i]);
}
printf("\n");
return 0;
}
posted @ 2011-12-06 22:07  技术人生1-2-3  阅读(330)  评论(1)    收藏  举报