今天学习并且编译了快速排序。
什么是快速排序呢?
快速排序要如何实现呢?
首先在编译程序之前对它的原理进行了解:
假如我们这里有一组不规则数列: A[]
快速排序首先需要找出一个基准数(tmp),然后从两边开始探测。我们分别设置两个变量(i),(j)去指向两边的数,先让j从右向左开始遍历,遇到比基准数小的则停止;再让i从左往右开始遍历,遇到比基准数大的便停止;此时让i所指向的数与j所指向的数交换;一直循环下去;当i与j重合时,将i/j指向的数与基准数交换位置,便可以得到,便可以得到一边全部小于基准数,另一边全部大于基准数的数列。
当i>j时,退出函数。
我们这里使用第一个数“7”作为基准。
接下来,将左边与右边分别进行排序;
逐次递归……
#include<stdio.h>
#include<string.h>
void q_sort(int* a, int lo, int hi)
{
int tmp = a[lo];
int i = lo;
int j = hi;
int temp;
if (i > j)
{
return;
}
while (i != j)//只有当i小于j时进行以下程序
{
while (a[j] >= tmp && i < j)
{
j--;
}//j从右向左开始遍历
while (a[i] <= tmp && i < j)
{
i++;
}//i从左往右开始遍历
if (i < j)
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}//a[i]与a[j]交换位置
}
//基准点与中间点互换位置
a[lo] = a[i];
a[i] = tmp;
q_sort(a, lo, i-1);
q_sort(a, i+1, hi);
}
int main()
{
int a[] = { 34,45,21,32,43,67 };
int n = sizeof(a) / sizeof(a[0]);
int lo = 0;
int hi = n - 1;
q_sort(a, lo, hi);
for (int i = 0; i < n; i++)
{
printf("%d ",a[i]);
}
return 0;
}