关于快速排序

Posted 317zhang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于快速排序相关的知识,希望对你有一定的参考价值。

快速排序  https://www.cnblogs.com/foreverking/articles/2234225.html

这位大佬讲的很清晰易懂,就是在我写代码的时候,出了点问题。

后来才发现,基准在左边的话,要先从右边开始循环(反之,亦然)。

 

 1 #include<iostream>
 2 #include<cstdio>
 3 
 4 using namespace std;
 5 
 6 int w[1000];
 7 void quicksort(int a[],int left,int right){
 8     //基准在左边,所以要先从右边开始执行。。唉。 
 9     int l=left,r=right,temp=a[left];
10     if(left>=right) return ;
11     while(l!=r){
12         while(l<r&&a[r]>temp) r--;
13         if(l<r)    a[l]=a[r];
14         while(l<r&&a[l]<temp) l++;
15         if(l<r) a[r]=a[l];
16         
17     }
18     a[l]=temp;
19     quicksort(a,left,l-1);
20     quicksort(a,l+1,right);
21 }
22 int main(){
23     int n;
24     scanf("%d
",&n);
25     for(int i=0;i<n;i++) scanf("%d",&w[i]);
26     quicksort(w,0,n-1);
27     for(int i=0;i<n;i++) printf("%d ",w[i]);
28     return 0;
29 }

 

以上是关于关于快速排序的主要内容,如果未能解决你的问题,请参考以下文章

关于快速排序

三种快速排序以及快速排序的优化

快速排序/快速选择算法

Java排序算法 - 堆排序的代码

排序算法杂谈 —— 关于快速排序的优化策略分析

图解算法基础--快速排序,附 Go 代码实现