您的位置:首页 > 编程语言 > C语言/C++

模板 C/C++ 快速排序

2019-03-17 15:31 363 查看

一、基本思想
通过一趟排序将待排序列分割成独立的两部分,其中一部分关键字均比另外一部分的关键字小,这两部分记录再继续进行排序,以达到整个序列有序。

二、代码实现

关键代码

void quickSort(int l,int r){
int mid = (arr[l]+arr[r])>>1;
int i = l, j = r;
do{
while(arr[i] < mid){
i ++;
}
while(arr[j] > mid){
j --;
}
if(i <= j){
int p = arr[i];
arr[i] = arr[j];
arr[j] = p;
i ++; j --;
}
}while(i<=j);
if(i < r){
quickSort(i,r);
}
if(j > l){
quickSort(l,j);
}
}

完整代码

#include<cstdio>
const int size = 100005;
using namespace std;
int n;
int arr[size];
int read(){
int f = 1,ans = 0;
char c;
c = getchar();
while(c<'0'||c>'9'){
if(c == '-'){
f = -1;
}
c = getchar();
}
while(c>='0'&&c<='9'){
ans = ans*10+c-'0';
c = getchar();
}
return f*ans;

}

void quickSort(int l,int r){
int mid = (arr[l]+arr[r])>>1;
int i = l, j = r;
do{
while(arr[i] < mid){
i ++;
}
while(arr[j] > mid){
j --;
}
if(i <= j){
int p = arr[i];
arr[i] = arr[j];
arr[j] = p;
i ++; j --;
}
}while(i<=j);
if(i < r){
quickSort(i,r);
}
if(j > l){
quickSort(l,j);
}
}
int main() {
n = read();
for(int i = 1; i <= n; i ++){
arr[i] = read();
}
quickSort(1,n);
for(int i = 1; i <= n; i ++){
printf("%d ",arr[i]);
}
return 0;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: