快速排序。
快速排序虽然是一种不稳定的排序方法。(如果排序前有两个相等的数,那么快速排序之后这两个数的相对位置有可能发生改变。) 但是它有其他内排序无法企及的平均性能。
所以对待排序记录个数很大且原始记录随机排列的情况很是适用。
快速排序一般使用分治法来实现。即 先确定一个基准量,然后从尾巴开始比较元素数值和基准量的大小,一旦遇到数值小于基准量的元素就交换位置并从头开始比较......
直到基准量左边元素的数值都不大于它且右边元素数值都不小于它。这样就把整个待排序列分成了两部分,然后两部分分别递归着再次进行上述比较,直到待排序列有序。
代码如下:其中选择数组首元素为基准量。
#include <stdio.h>
#include <stdlib.h>
void Quick_Sort (int a[],int pro,int last); //快排函数声明。形式参量分别为待排序数组、数组首元素下标、末元素下标。
int main(void) {
int Array[] = {6,43,2,7,3,23,1,4,9};
int num = sizeof (Array) / sizeof (int); // 确定数组a[]的元素个数。
int i;
Quick_Sort (Array,0,num - 1); // 调用函数。
for (i = 0;i < num;i++)
{
printf ("%d\n",Array[i]); //打印。
}
return 0;
}
void Quick_Sort (int a[],int pro,int last)
{
int i,j,val;
val = a[pro]; // val 是一个基准量。
i = pro;
j = last;
if (i < j) // 用来结束递归的条件。
{
while (i < j)
{
while (i < j && val < a[j])
{
j--;
}
if (i < j)
{
a[i] = a[j];
i++;
}
while (i < j && val > a[i])
{
i++;
}
if (i < j)
{
a[j] = a[i];
j--;
}
}
a[i] = val;
Quick_Sort (a,pro,i-1);
Quick_Sort (a,i+1,last);
}
}
本文介绍了快速排序的基本原理,一种高效的排序算法,并提供了详细的C语言实现代码。通过递归方式,选择基准元素将数据分为两部分,分别进行排序。
873

被折叠的 条评论
为什么被折叠?



