快排:
首先介绍:
* 快排的定义:
快速排序由C. A. R. Hoare在1962年提出。快速排序是对冒泡排序的一种改进,采用了一种分治的策略。(快排又叫做折半法排序)
* 快排的基本思想
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行(函数的递归调用),以此达到整个数据变成有序序列。
* 快排的步骤
- 先从数列中取出一个数作为基准数。
- 分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
- 再对左右区间重复第二步,直到各区间只有一个数。
(注意:在进行排序的时候要从右开始比较,从最左边开始的为i,从最右边开始的为j,当i与j相遇
时就需要停止并且把基准数和停止位置的数交换。
如下图:
)
现在再来看一下快排代码:
#include<stdio.h>
int a[101],n;
void QuickSort(int left, int right);
int main()
{
scanf("%d",&n);
int i;
for(i = 0;i < n;i++){
scanf("%d",&a[i]);
}
QuickSort(0,n-1);
for(i = 0;i < n;i++){
printf("%d\n",a[i]);
}
return 0;
}
void QuickSort(int left, int right)
{
int i,j,t,temp;
if(left>right) return;
i = left;
j = right;
temp = a[left];
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);
}