快速排序讲解
排序算法的最基本要义就是选取某个固定值当标准,大于等于它的放在右边,小于等于它的放在它的左边,算法解析,以下方的数组为例,初始的时候,数组0位空缺,用来放置标准值,初始的时候标准值等于啊a[1],end=10,start=1,i=start,j=end从右方开始找起,一直找到一个小于标准值50的,所以j=9,然后a[i]=a[j],(第二行)换过之后,从左边开始找起,一直找到一个大于50的值,一直找到大于50的,所以i=2,然后执行a[j]=a[i](第三行),再继续循环,一直等到i>=j的时候,便跳出循环,这时就是最后一步,将标准值与a[j]互换,形成一边小于标准值(1-3),一边大于等于标准值(4-10),在利用递归,将两个数组继续执行上诉过程,这样一遍遍的循环下去,便会将整个数组排序完成。
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
50 | 50 | 62 | 34 | 85 | 42 | 71 | 52 | 84 | 16 | 49 |
50 | 16 | 62 | 34 | 85 | 42 | 71 | 52 | 84 | 16 | 49 |
50 | 16 | 62 | 34 | 85 | 42 | 71 | 52 | 84 | 62 | 49 |
50 | 16 | 42 | 34 | 85 | 42 | 71 | 52 | 84 | 62 | 49 |
50 | 16 | 42 | 34 | 85 | 85 | 71 | 52 | 84 | 62 | 49 |
50 | 16 | 42 | 34 | 50 | 85 | 71 | 52 | 84 | 62 | 49 |
</pre><pre name="code" class="cpp"><pre name="code" class="cpp"><pre name="code" class="cpp">#include<stdio.h>
#include<stdlib.h>
int main()
{
void Qsort(int a[],int i,int j);
void print(int a[],int n);
int a[]={0,50,62,34,85,42,71,52,84,16,49};
print(a,10);
printf("\n");
Qsort(a,1,10);
print(a,10);
return 0;
}
void print(int a[],int n)
{
int i;
for(i=1;i<=n;i++)
{
printf("%d ",a[i]);
}
}
void Qsort(int a[],int start,int end)
{
int i=start,j=end;
a[0]=a[start];
while(i<j)
{
while(i<j&&a[j]>a[0])
{
j--;
}
if(i<j)
{
a[i]=a[j];
i++;
}
while(i<j&&a[i]<=a[0])
{
i++;
}
if(i<j)
{
a[j]=a[i];
j--;
}
}
a[j]=a[0];
if(start<j)
{
Qsort(a,start,j-1);
}
if(j<end)
{
Qsort(a,j+1,end);
}
}