1、快速排序的核心思想:
快速排序是由东尼·霍尔所发展的一种排序算法。其基本思想是基本思想是,通过一趟排序将待排记录分隔成两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。
2、代码实现:
#include <stdio.h>
// 步骤为:
// 1、从数列中挑出一个元素,称为 "基准"(pivot),
// 2、重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。
// 在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。
// 3、递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
void quicksort(int a[],int left,int right)
{
int i,j,key,low,high;
low = left;
high = right;
key = a[left];
if(left < right) //假设左边的数小于右边的数
{
while(low < high) //如果左边的值一直小于右边的值
{
//从右边开始找最接近甚至等于key的数
while((low < high) && (a[high] >= key))
{
high--; 注:high此处代表的是数组的下标
}
a[low] = a[high];
//从左边开始找最接近甚至等于key的数
while((low < high) && (a[low] <= key))
{
low++; //注:low此处代表的是数组的下标
}
a[high] = a[low];
}
a[low] = key;
//调用递归
quicksort(a,left,low-1);
quicksort(a,low+1,right);
}
}
int main()
{
int i;
int n;
int a[100];
printf("请输入数组长度\n");
scanf("%d",&n);
printf("请输入数组元素\n");
for(i= 0;i < n; i++)
{
scanf("%d",a+i);
}
//调用快速排序
quicksort(a,0,n - 1);
//输出排序后的数组
for(i = 0; i < n; i++)
{
printf("%d ",a[i]);
}
printf("\n");
}