快速排序过程分析
(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--;
while (a[i] <= key && i < j) i++;
if(i < j) {
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
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);
display(array,sizeof(array) / sizeof(array[0]));
return 0;
}
12
16
23
25
34
85