文章目錄
快速排序時限:1000ms 記憶體限制:10000K 總時限:3000ms
描述:
給定一個數列,用快速排序演算法把它排成升序。
輸入:
第一行是一個整數n,表示要排序的數的個數;下面一行是用空格隔開的n個整數。
輸出:
輸出排序後的數列,每個數字佔一行。
輸入範例:
5
3 2 1 4 5
輸出範例:
1
2
3
4
5
代碼:
#include<stdio.h>#include<stdlib.h> int *a;int Partition(int low,int high){ int temp; int pivotkey=a[low]; while(low<high) { while(low<high&&a[high]>=pivotkey) { --high; } temp=a[low]; a[low]=a[high]; a[high]=temp; while(low<high&&a[low]<=pivotkey) { low++; } temp=a[low]; a[low]=a[high]; a[high]=temp; } return low;}void QSort(int low,int high){ int pivotloc; if (low < high) { pivotloc = Partition(low, high); // 將L.r[low..high]一分為二 QSort(low, pivotloc-1); // 對低子表遞迴排序,pivotloc是樞軸位置 QSort(pivotloc+1, high); // 對高子表遞迴排序 }}int main(){ int n,i; scanf("%d",&n); a=(int *)malloc((n+1)*sizeof(int)); for(i=1;i<=n;i++) { scanf("%d",&a[i]); } QSort(1,n); for(i=1;i<=n;i++) { printf("%d\n",a[i]); }return 0;}