快速排序:
快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。
它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可 递归进行,以此达到整个数据变成有序序列。
时间复杂度:O(n*logn)
最坏:O(n^2)
空间复杂度:O(n*logn)
稳定性:不稳定
交换:
void swap(int *a,int *b)
{
int temp=*a;
*a=*b;
*b=temp;
}
int Partitiion(int arr[],int low,int high)
{
//int pointKey=arr[low];
while(low<high)
{
while(low<high&&arr[low]<=arr[high]) high--;
swap(&arr[low],&arr[high]);
while(low<high&&arr[high]>=arr[low]) low++;
swap(&arr[low],&arr[high]);
}
return low;
}
分治:
void qSort(int arr[],int low,int high)
{
int point;
if(low>=high)
return ;
point=Partition(arr,low,high);
qSort(arr,low,point-1);
qSort(arr,point+1,high);
}
举个栗子:
void print(int seq[],int len)
{
int *p=seq;
while(p!=&seq[len])
{
printf("%d ",*p);
p++;
}
printf("\n");
}
int main()
{
int Seq[]={11,5,2,3,6,4,8,9,15,12};
printf("排序前:");
print(Seq,10);
printf("排序后:");
qSort(Seq,0,9);
print(Seq,10);
return 0;
}