快速排序

来源:互联网 发布:淘宝打包员累吗? 编辑:程序博客网 时间:2024/05/17 05:04

算法分类:

分治


算法原理:

类似于合并排序,而其优于合并排序,因为其对数组是在原位上排序,不需额外辅助空间。


时空复杂度:

O(nlogn) (theta)


代码实现:

/* * 快速排序  */ #include <iostream>using namespace std;int split(int data[], int l, int r){int  i, j, x, w;i = l;x = data[l];for (j = l+1; j < r; ++ j) {if (data[j] <= x) {++ i;if (i != j)swap(data[i],data[j]);}}swap(data[l],data[i]);return i;};void quicksort(int data[], int l, int r){if (l < r){int w = split(data, l, r);quicksort(data,l,w);quicksort(data,w+1,r);}};int main(){int  T, n, arr[1005];scanf("%d",&T);while (T --){scanf("%d",&n);for (int i = 0; i < n; ++ i)scanf("%d",arr+i);quicksort(arr,0,n);for (int i = 0; i < n-1; ++ i)printf("%d ",arr[i]);printf("%d\n",arr[n-1]);}}