算法的大致流程:
1.创建两个变量i,j,i 指向第一个元素,j指向最后一个元素。整个过程中要保证i<j;
2.把数组里的第一元素作为基准数。k = data[0]
3.从j开始从右往左找,不断的递减j,把所有比k小的数移到k的左边。
4.从i+1元素向右找,递加i,将大于k的数移到k的右边。
5.直到 i=j,第一遍结束。
6.再将两边的分组重复这个过程,直到不能再分。
代码实现:
#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>
void swap(int &a, int &b)
{
int k;
k = a;
a = b;
b = k;
}
void quick_sort(int* data,int start,int end)
{
if (start >= end)return;
int i = start+1;
int j = end;
int k = data[start];
while (i < j)
{
while (k < data[j]&&i < j)
j--;
while (k >data[i]&&i < j)
i++;
swap(data[i], data[j]);
}
if (data[start] > data[i])
swap(data[start], data[i]);
if(start <i)
quick_sort(data, start, j - 1);
if(i < end)
quick_sort(data, j + 1, end);
}
void main()
{
int data[10];
printf("请输入10个数: \n");
for (int i = 0;i < 10; i++)
scanf_s("%d", &data[i]);
quick_sort(data,0,9);
printf("排序后的顺序: \n");
for (int i = 0; i < 10;i++)
printf("%5d", data[i]);
printf("\n");
system("pause");
}
结果展示: