快速排序 + 代码实现(C语言)
Posted Stevin的技术博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速排序 + 代码实现(C语言)相关的知识,希望对你有一定的参考价值。
快速排序过程分析
(1)首先设定一个分界值key,一般使用数组第一个元素,通过该分界值将数组分成左右两部分。
(2)将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边 。此时,左边部分中各元素都小于或等于分界值,而右边部分中各元素都大于或等于分界值。
(3)然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。
重复上述过程,这是一个递归定义。通过递归将左侧部分排好序后,再递归排好右侧部分的顺序。当左、右两个部分各数据排序完成后,整个数组的排序也就完成了。
代码实现
#include <stdio.h>
//快速排序函数 分别传入数组、左边索引、右边索引
void quickSort(int a[], int left, int right) {
int i = left, j = right,key,t;
if (left >= right) return; //如果左边索引大于或者等于右边的索引直接退出
key = a[left];
while (i < j) {
while (a[j] >= key && i < j) j--; //该循环完成后a[j] < pk
while (a[i] <= key && i < j) i++; //该循环完成后a[i] > pk
// 两个while结束的时候a[i]>a[j]
if(i < j) {
t = a[i];
a[i] = a[j];
a[j] = t;
}
} //while结束的时候i=j
a[left] = a[i];
a[i] = key;
quickSort(a, left, i - 1);
quickSort(a, i+1, right);
}
//打印输出函数
void display(int array[],int length) {
for (int i = 0; i < length; i++) {
printf("%d \\n",array[i]);
}
}
// 主函数
int main()
{
int array[] = {12,85,25,16,34,23};
quickSort(array, 0, 5);
//sizeof(array) :数组总长度,sizeof(array[0]):数组单个元素长度。做除法求得了数组元素个数
display(array,sizeof(array) / sizeof(array[0]));
return 0;
}
运行结果
12
16
23
25
34
85
以上是关于快速排序 + 代码实现(C语言)的主要内容,如果未能解决你的问题,请参考以下文章