editplus绿色中文版:怎样用快速法进行排序?

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/28 23:52:15
给出任意一列数列 怎样用快速法实现排序?怎样求它的时间和空间复杂度?能否给出具体源程序 谢谢!

快排的思想:
找一个指点(pivot)使支点左的数都比支点值小,右边都比支点值大,支点的位置就固定下来了
然后就可以利用递归

可以用区间的第一个、最后一个或者中间一个作为支点值,使空区间尽量少,在最坏情况下的效率得以提高

代码如下,自己对照一下:
#include<iostream>
using namespace std;

int A[10]={10,9,7,6,5,4,3,2,1,-2}; //要排序的数

//打印函数
void print(int *A, int len)
{
for(int i = 0 ; i < len ; i++)
cout<<A[i]<<' ';
cout<<"\n";
}

//自己改一下
int split(int *A , int first , int len )//参数为数组,数组首的下标,数组长度
{
int x=A[first];
int i=first+1;
for(int j=i+1 ; j < len ; j++ )
{
if( A[j] <= x )
{
int a=A[j];
A[j]=A[i];
A[i]=a;
}
i++;
}
int a=A[first];
A[first]=A[i];
A[i]=a;
return i;
}

//快速排序函数
void quitsort(int *A, int first, int len) //参数为数组,数组首的下标,数组长度
{
if(first<len-1)
{
int w=split(A,first,len);
quitsort(A,first,w);
quitsort(A,w+1,len);
}
}
int main()
{
print(A,10); //输出排序前的数
quitsort(A,0,11);//排序
print(A,11); //输出排序后的数
return 0;
}

同意楼上的