c语言快速排序
含义
快速排序是指通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序。整个排序过程可以递归进行,以此达到整个数据变成有序序列。
步骤
(1)从数列中挑出一个元素,称为“基准”,
(2)重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面(相同的数可以到任何一边)。在这个分区结束之后,该基准就处于数列的中间位置。这个称为分区操作。
(3)递归地把小于基准值元素的子数列和大于基准值元素的子数列排序。
(4)递归到最底部时,数列的大小是零或一,也就是已经排序好了。这个算法一定会结束,因为在每次的迭代中,它至少会把一个元素摆到它最后的位置去。
(5)理解分治与递归
#include<stdio.h>
int a[101],n; //建立全局变量
void quicksort(int left ,int right )
{
int i,j,t,temp;
if(left>right)
{
return ; //判断是否进行
}
temp=a[left]; //确立基准数为最左边的数
i=left;
j=right;
while(i!=j)
{
while(a[j]>=temp && i<j) //从右向左边开始遍历
{
j--;
}
while(a[i]<=temp && i<j) //从左向右边开始遍历
{
i++;
}
if(i<j) //判断成立 进行交换
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
a[left]=a[i];
a[i]=temp;
quicksort(left ,i-1); //递归,继续基准数左边的数排序
quicksort(i+1,right); //递归,继续基准数右边的数排序
return ;
}
int main()
{
int i,j;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]); //待排序数组
}
quicksort(1,n);
for(i=1;i<=n;i++)
{
printf("%d ",a[i]); //输出
}
getchar(); //读取返回值的空格
return 0;
}