快速排序
核心思想
通过一趟排序将待排序的记录分割成两个独立的部分,其中一部分记录的关键字均比另一部分的关键字小,在分成两个部分之后则可以分别对这两个部分继续进行排序,从而使整个序列有序。
例题
题目描述
读入一串整数,将其使用快速排序的方法从小到大排序,并输出。
输入描述
输入的第一行包含1个正整数n,表示共有n个整数需要参与排序。其中n不超过100000。
第二行包含n个用空格隔开的正整数,表示n个需要排序的整数。
输出描述
只有1行,包含n个整数,表示从小到大排序完毕的所有整数。
请在每个整数后输出一个空格,并请注意行尾输出换行。
样例输入
10
2 8 4 6 1 10 7 3 5 9
样例输出
1 2 3 4 5 6 7 8 9 10
题目分析
本题使用的方法是快速排序,整体的思路是运用递归的方法
具体步骤:
- 先写递归结束条件,当本序列只有一个数的时候程序直接return
- 定义三个变量,一个是最中间的元素mid,另外两个一个是左半边序列第一个元素的下标i,另一个是右半边序列的最后一个元素的下标j
- while循环直至i>=j中间嵌套两个while循环,第一个循环i++直至第i个元素>=mid,第二个循环j–直至第j个元素<=mid循环结束后交换两个元素
- 左右递归
代码
#include <iostream>
#include <cstdio>
using namespace std;
int m;
int a[100005];
int tmp[100005];
void quicksort(int l,int r){
if(l>=r)
return;
int i=l-1,j=r+1;
int mid=a[l+r>>1];
while(i<j)