快速排序
想必如果你学了递归,那快速排序也是必不可少的内容;
接下来就简单介绍一下快速排序。
快速排序:是对冒泡排序算法的一种改进,基本思想是:将整个要排序的数据分割成两个部分,其中一部分要比另一部分要小,依照此方法对分成的两部分数据在进行运算,形成递归,就可以使整个数组变成一个有序的序列。
话不多说进入正题。
首先去一段要排序的数组:
array[]={12,34,128,90,36,68,66,234,801};
去一个中间的作为划分的依据
{12,34,128,90,36,68,66,234,801}
array[mid]=36
设置函数 void quick_sort(int array[],int left,int right)
将函数的头赋值给 left 将函数的尾赋值给right;
交换过程//按从小到大
1.如果左边的值比中间值小 则 i 继续加一 直到 左值比中间值大,
2.如果右边的值比中间值大 则 j 继续减一 直到 右值比中间值小,
3.其中判断条件 i<=j说明 其中左边的值比中间值大,右边的值比中间值小
则进行交换 借助一个中间值 temp,直到 i>j。
while(i<=j)
{
while(array[i]<array[mid])
{
i++;
}
while(array[j]>array[mid])
{
j--;
}
if(i<=j)
{
temp=array[i];
array[i]=array[j];
array[j]=temp;
i++;
j--;
}
}
当循环条件执行完 说明 i>j 形成两部分数据接下来再执行
if(j>left)
quick_sort(array,left,j);
if(i<right)
quick_sort (array,i,right);
j的值在左边,i的值在右边
但继续遍历的条件 j的值比最左边的值要大
i的值比最右边的值要小 最后进行递归运算
整理的c代码
//快速排序
#include<stdio.h>
void quick_sort(int array[],int left,int right);
void quick_sort(int array[],int left,int right)
{
int i=left;
int j=right;
int mid=(i+j)/2,temp;
while(i<=j)
{
while(array[i]<array[mid])
{
i++;
}
while(array[j]>array[mid])
{
j--;
}
if(i<=j)
{
temp=array[i];
array[i]=array[j];
array[j]=temp;
i++;
j--;
}
}
if(j>left)
quick_sort(array,left,j);
if(i<right)
quick_sort (array,i,right);
}
int main()
{
int array[]={12,34,128,90,36,68,66,234,801};
int length;
int k;
length=sizeof(array)/sizeof(array[0]);
quick_sort( array,0,length-1);
printf("最终排序结果:");
for(k=0;k<length;k++)
printf("%5d",array[k]);
return 0;
}
经过学习和了解以上是我对 快速排序的拙见。
还有很多不足之处,望多指教,多留言。