排序之交換類排序
阿新 • • 發佈:2018-12-09
1.氣泡排序
//氣泡排序 void BubbleSort(int R[],int n) { int i,j; int flag;//在一趟迴圈過程中為發生交換,則代表已經有序 for(i=1;i<=n;i++){ flag=1; for(int j=2;j<=n;j++){ if(R[j]<R[j-1]){ swap(R[j],R[j-1]); flag=0; } } if(flag) return ; } }
2.快速排序
//快速排序 void QuickSort(int R[],int left,int right) { int temp; int l=left,r=right; if(left<right) { temp=R[left]; //將所有比temp大的值移到右邊,比temp小的值移到左邊 while(l!=r){ //從右往左尋找比當前數小的數,將其交換,移到左側 while(r>l&&R[r]>temp) r--; if(l<r){ swap(R[l],R[r]); l++; } //從左向右尋找比當前數大的數,將其交換,移到右側 while(r>l&&R[l]<temp) l++; if(l<r){ swap(R[l],R[r]); r--; } } R[l]=temp;//這裡l與r相等,為騰出來的空地方 QuickSort(R,left,l-1); QuickSort(R,l+1,right); } }