什么是快速排序,让我们看看百度百科的介绍:
快速排序(Quicksort),计算机科学词汇,适用领域Pascal,c++等语言,是对冒泡排序算法的一种改进。
快速排序的步骤:
排序演示假设一开始序列{xi}是:5,3,7,6,4,1,0,2,9,10,8。
此时,ref=5,i=1,j=11,从后往前找,第一个比5小的数是x8=2,因此序列为:2,3,7,6,4,1,0,5,9,10,8。
此时i=1,j=8,从前往后找,第一个比5大的数是x3=7,因此序列为:2,3,5,6,4,1,0,7,9,10,8。
此时,i=3,j=8,从第8位往前找,第一个比5小的数是x7=0,因此:2,3,0,6,4,1,5,7,9,10,8。
此时,i=3,j=7,从第3位往后找,第一个比5大的数是x4=6,因此:2,3,0,5,4,1,6,7,9,10,8。
此时,i=4,j=7,从第7位往前找,第一个比5小的数是x6=1,因此:2,3,0,1,4,5,6,7,9,10,8。
此时,i=4,j=6,从第4位往后找,直到第6位才有比5大的数,这时,i=j=6,ref成为一条分界线,它之前的数都比它小,之后的数都比它大,对于前后两部分数,可以采用同样的方法来排序。
代码实现:
#include
#include
void quicksort(int [],int ,int );
int main(void)
{
int arr[11] ={5,3,7,6,4,1,0,2,9,10,8};
quicksort(arr,0,10);
int i;
for(i = 0 ;i < 11;i++)
{
printf("%d ",arr[i]);
}
return 0;
}
void quicksort(int arr[],int left,int right)
{
int qian = left ,hou = right;
if(qian > hou)
{
return;
}
else
{
while(qian < hou)
{
while(qian < hou &&arr[hou] >= arr[left])
{
hou--;
}
while(qian < hou &&arr[qian] <= arr[left])
{
qian++;
}
//相遇
if(qian == hou)
{
break;
}
//未相遇
int temp = arr[qian];
arr[qian] = arr[hou];
arr[hou] = temp;
}
if(qian != left)
{
int tmp = arr[qian];
arr[qian] = arr[left];
arr[left] = tmp;
}
//递归
quicksort(arr,left,qian - 1);
quicksort(arr,hou+1,right);
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)