大致思路:
1 . 先从数列中取出一个数作为基准数。
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数。
核心思想:挖坑填数+分治
具体实现:
具体代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int Fink_key(int *a, int left, int right)
{
int key = a[left];
if (right > left)
{
while (right > left&&a[right] >= key)
{
right--;
}
a[left] = a[right];
while (right > left&&a[left] <= key)
{
left++;
}
a[right] = a[left];
}
a[left] = key;
return left;
}
void Quick_Sort(int *a, int left, int right)
{
int pos;
if (left < right)
{
pos = Fink_key(a, left, right);
Quick_Sort(a, left, pos - 1);
Quick_Sort(a, pos + 1, right);
}
}
int main()
{
int a[5] = { 5, 4, 3, 2, 1 };
int left = 0;
int right = (sizeof(a) / sizeof(a[0])) - 1;
Quick_Sort(a, left, right);
for (int i = 0; i < sizeof(a) / sizeof(a[0]); i++)
{
printf("%d", a[i]);
}
system("pause");
return 0;
}