今天来讲什么呢?讲下排序算法吧,全部讲完肯定不可能,我们今天来看下其中的一种——快速排序,带大家一起学习快速排序算法。
快速排序的思想:
1 先从数组中选取一个数作为基准点,可随机选择;
2 将数组中大于该基准点的放在该基准点右边,小于该基准点的放在该基准点左边;
3 对左右两个数组进行快速排序。
快速排序的流程:
整个算法处理过程:
算法动态演示:
代码如下:
让我们来看下怎么实现快速排序算法
#include <stdio.h>
void swap(int a[], int low, int high) //交换两个数的值
{
int t = a[low];
a[low] = a[high];
a[high] = t;
}
int partition(int a[], int low, int high) //计算基准点,分割为左右两个数组
{
int point = a[low];//基准点等于第一个元素
/ while(1){
while(low<high && a[++low]<point);
while(a[--high]>point);
if(low>=high) break;
*/
while(low<high)
{
while(low<high && a[high]>=point)//控制high指针比较并左移
{
high--;
}
swap(a,low,high);
//}
while(low<high && a[low]<=point)//控制low指针比较并右移
{
low++;
}
swap(a,low,high);
}
return low;//返回基准点位置
}
void quicksort(int a[], int low, int high) //low:起始位置 high:末尾位置
{
if(low<high){
int point = partition(a,low,high);//计算基准点
quicksort(a,low,point-1); //对基准点的左边进行排序
quicksort(a,point+1,high);//对基准点的右边进行排序
}
}
int main()
{
int i;
int a[] = {5,13,6,24,2,8,19,27,6,12,1,17};
int N = 12;
quicksort(a, 0, N-1);
for(i=0; i<N; i++) printf("%d ", a[i]);
printf("n");
return 0;
}
总结
OK,简单总结一下,最开始学习编程,遇到排序问题,一般都是用冒泡法,因为冒泡法好理解,代码量少。但是这种算法时间复杂度高,当需要排序的元素较多时,程序运行时间很长,因此产生了快速排序算法。不知道大家弄懂了没有,没有弄懂一定要收藏起来反复的查阅,一定要有不弄懂不罢休的态度才行,哈哈哈,今天就到这里啦,在这里希望可以得到大家的关注以及点赞啦,希望大家可以多多支持!!你们的点赞就是我坚持下去的动力!