分治法_快速排序
阿新 • • 發佈:2019-01-23
【程式】
#include <stdio.h> #define N 100 void swap(int *p,int *q) //交換 { int t; t=*p; *p=*q; *q=t; } int Partition(int a[],int l,int r) { int i,j,p; p=a[l]; //把第一個數作為基準 i=l;j=r+1; while(i<j) { do{ i++; } while(p>a[i]); do{ j--; }while(p<a[j]); swap(&a[i],&a[j]); } swap(&a[i],&a[j]); swap(&a[l],&a[j]); return j; } void Quicksort(int a[],int l,int r) { int s; if(l<r) { s=Partition(a,l,r); //取出基準 Quicksort(a,l,s-1); //基準左邊排序 Quicksort(a,s+1,r); //基準右邊排序 } } int main() { int a[N],i,n; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&a[i]); Quicksort(a,0,n-1); for(i=0;i<n;i++) printf("%d ",a[i]); }