快速排序
原理:递归调用
#include "stdio.h"
void quick_sort(int a[], int start, int end);
#define LEN 5
void main()
{
int k;
int a[LEN] ;
printf("请输入%d个数字:\n", LEN);
for (k = 1; k < LEN; k++)
{
scanf_s("%d", &a[k]);
}
printf("排序前的%d个数字为:\n", LEN);
for (k = 1; k < LEN; k++)
{
printf("%d\n", a[k]);
}
quick_sort(a, 1, LEN - 1);
printf("排序后的%d个数字为:\n", LEN);
for (k = 1; k < LEN; k++)
{
printf("%d\n", a[k]);
}
}
void quick_sort(int a[], int start, int end)
{
int i=start, j=end ;
a[0] = a[start];
/*第一次*/
while (i < j)
{
while (i < j&&a[j] > a[0])
{
j--;
}
if (i<j)
{
a[i] = a[j];
i++;
}
while (i < j&&a[i] <=a[0])
{
i++;
}
if (i < j)
{
a[j] = a[i];
j--;
}
}
a[i] = a[0];
/*第一次*/
/*****递归***********递归***********递归***********递归***********递归***********递归***********递归******/
if (start < i)//递归条件---------------------------start<i:左侧数组长度至少为2
{
end = i - 1;
quick_sort(a, start, end);//左边递归
}
if (i < end)//递归条件---------------------------i<end:右侧数组长度至少为2
{
start = i + 1;
quick_sort(a, start, end);//右边递归
}
/*****递归***********递归***********递归***********递归***********递归***********递归***********递归******/
}