思想:
它是由冒泡排序改进而来的。在待排序的n个记录中任取一个记录(通常取第一个记录),把该记录放入适当位置后,数据序列被此记录划分成两部分。所有关键字比该记录关键字小的记录放置在前一部分,所有比它大的记录放置在后一部分,并把该记录排在这两部分的中间(称为该记录归位),这个过程称作一趟快速排序。
说明:最核心的思想是将小的部分放在左边,大的部分放到右边,实现分割。
时间复杂度:
最好情况 :O(nlogn)
最坏情况 :O(nlog2n)
因为每次都将序列分为两个部分(一般二分都复杂度都和logN相关)
空间复杂度:(nlog2n)
稳定性:
原来的顺序就可能被打乱。如序列为 5 3 3 4 3 8 9 10 11会将3的顺序打乱。所以说,快速排序是不稳定的!
#include<stdio.h>
void printArray(
int a[],
int size)
{
int i;
for(i =
0; i < size; i++)
printf(
"%d ",a[i]);
printf(
"\n");
}
void quick_sort(
int array[],
int left,
int right)
{
int i,j,t,temp;
if(left>right)
return ;
temp=
array[left];
i=left;
j=right;
while(i!=j)
{
while(
array[j]>=temp && i<j)
j--;
while(
array[i]<=temp && i<j)
i++;
if(i<j)
{
t=
array[i];
array[i]=
array[j];
array[j]=t;
}
}
array[left]=
array[i];
array[i]=temp;
printArray(
array,
10);
quick_sort(
array,left,i-
1);
quick_sort(
array,i+
1,right);
}
int main()
{
int count=
10,a[
10]={
3,
0,
1,
8,
7,
2,
5,
4,
9,
6};
printArray(a,count);
quick_sort(a,
0,count -
1);
}
转载请注明原文地址: https://ju.6miu.com/read-1305558.html