快速排序的算法的核心思想是设定一个值,把比这个值大的往右“扔”,比这个值小的往左“扔”。
数组快速排序的过程:
- 设置两个变量i、j,排序开始时:i=0,j=n-1;(n为排序总数)
- 以数组中的第一个元素作为比较的值,赋给变量key,即key=a[0];
- 首先从j往前搜索,即从后往前(–j),找到第一个小于key的值a[j],将a[j]与a[i]进行互换;
- 然后再从i往后搜索,即从前往后(++i),找到第一个大于key的值a[i],将a[i]与a[j]进行互换;
- 重复第三、四步,直到i等于j。此时就能确保序列中key的左边全是比key小的值,key的右边全是比key大的值。然后再对左右两边分别递归执行上面几个步骤,直到排序结束。
#include <stdio.h>
void QuickSort (int *,int,int);//函数声明,快速排序//
int main(int argc,const char *argv[])
{
int i;
int a[]={900,2,-58,3,34,5,76,7,32,4,43,9,1,56,8,-70,635,-234,532,543,2500};
QuickSort(a,0,20);/*引用起来很简单,0为第一个元素的下表,20为最后一个元素的下表*/
printf("最终排序结果为:\n");
for(i=0;i<=20;++i)
{
printf("%d\n",a[i]);
}
printf("\n");
return 0;
}
void QuickSort(int *a,int low,int high)
{
int i,j;
i=low;
j=high;
int key=a[low];
if(low>=high)//如果low>=high说明排序结束了
{
return;
}
while(low<high)//该while循环结束一次表示比较了一轮//
{
while(low<high&&key<=a[high])
{
--high;
}
if(key>a[high])
{
a[low]=a[high];
++low;
}
while(low<high&&key>=a[low])
{
++low;
}
if(key<a[low])
{
a[high]=a[low];
--high;
}
}
a[low]=key;
QuickSort(a,i,low-1);
QuickSort(a,low+1,j);
}