快速排序
排序方法有很多种:选择排序,冒泡排序,归并排序,快速排序等。 看名字都知道快速排序是目前公认的一种比较好的排序算法。
快速排序的核心思想是二分法。
在此,我以升序为例。
首先,我们需要选取一个基准数temp,再通过循环比较,将比基准数小的放在左边,大的放右边,然后把基准数归位。之后,用递归,将每一段二分,直到所有数都归位,此时每段左边都比右边小,完成排序。
代码如下:
#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]; //temp中存的就是基准数
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);//继续处理右边的 ,这里是一个递归的过程