AcWing算法基础1.1
排序
快速排序(快排)
写题的时候用的不多基本都是直接sort ( ),面试可能要手撸快排,上模板
1 void quick_sort(int q[], int l, int r) 2 { 3 if(l >= r) return; 4 int i = l - 1, j = r + 1, x = q[l]; 5 while(i < j) 6 { 7 do i ++ ; while(q[i] < x); 8 do j -- ; while(q[j] > x); 9 if(i < j) swap(q[i],q[j]); 10 else break; 11 } 12 quick_sort(q, l, j), quick_sort(q, j + 1, r); 13 }
模板题
给定你一个长度为n的整数数列。
请你使用快速排序对这个数列按照从小到大进行排序。
并将排好序的数列按顺序输出。
输入格式
输入共两行,第一行包含整数 n。
第二行包含 n 个整数(所有整数均在1~109109范围内),表示整个数列。
输出格式
输出共一行,包含 n 个整数,表示排好序的数列。
数据范围
1≤n≤1000001≤n≤100000
输入样例:
5 3 1 2 4 5
输出样例:
1 2 3 4 5
#include <iostream> #include <cstdio> using namespace std; void quick_sort(int p[], int l, int r); const int mx = 1e5 + 10; int n, a[mx]; int main() { cin >> n; for(int i = 0; i < n; i ++) scanf("%d",&a[i]); int l = 0, r = n - 1; quick_sort(a, l, r); for(int i = 0; i < n; i ++) printf("%d ",a[i]); return 0; } void quick_sort(int p[], int l, int r) { if(l >= r) return; int i = l - 1, j = r + 1, x = p[l]; while(i < j) { do i ++; while(p[i] < x); do j --; while(p[j] > x); if(i < j) swap(p[i],p[j]); else break; } quick_sort(p, l, j), quick_sort(p, j + 1, r); }