資料結構 快速排序氣泡排序
阿新 • • 發佈:2018-11-22
#include<iostream> #include<time.h> #include<stdlib.h>//使用庫函式srand和rand函式 using namespace std; const int Max=10; void Creat(int r[],int n); void BubbleSort(int r[],int n);//起泡排序 int Partition(int r[],int first,int end) ;//一次劃分 void QuickSort(int r[],int first ,int end);//快速排序 int main() { int a[Max+1]={0}; int b[Max+1]={0}; int i=0; Creat(a,Max); for(i=1;i<=Max;i++)//將陣列a複製一份到陣列b b[i]=a[i]; cout<<"對於無序序列:"; for(i=1;i<=Max;i++) cout<<b[i]<<" "; cout<<endl; BubbleSort(b,Max); cout<<"執行起泡排序後,元素為:"; for(i=1;i<=Max;i++) cout<<b[i]<<" "; cout<<endl; cout<<"對於無無序序列:"; for(i=1;i<=Max;i++) cout<<a[i]<<" "; cout<<endl; QuickSort(a,1,Max); cout<<"執行快速排序後,元素為:"; for(i=1;i<=Max;i++) cout<<a[i]<<" "; cout<<endl; return 0; } void Creat(int r[],int n) { int i=0; srand(time(NULL)); for(i=1;i<=n;i++) r[i]=1+rand()%100;//待排序記錄為兩位數 } void BubbleSort(int r[],int n) { int exchange=n; int bound=n; while(exchange!=0) { bound=exchange; exchange=0; int j; for(j=1;j<bound;j++) if(r[j]>r[j+1]) { r[0]=r[j]; r[j]=r[j+1]; r[j+1]=r[0]; exchange=j;//記錄每一次交換的位置 } } } int Partition(int r[],int first,int end) { int i=first; int j=end;//初始化 while(i<j) { while(i<j&&r[i]<=r[j]) j--;//右側掃描 if(i<j) { r[0]=r[i]; r[i]=r[j]; r[j]=r[0]; i++; } while(i<j&&r[i]<=r[j]) i++;//左側掃描 if(i<j) { r[0]=r[i]; r[i]=r[j]; r[j]=r[0]; j--; } } return i;//i為軸記錄的最終位置 } void QuickSort(int r[],int first,int end) { if(first<end) { //區間長度大於一執行一次劃分,否則遞迴結束 int pivot=Partition(r,first,end); QuickSort(r,first,pivot-1);//遞迴對左側子序列進行快速排序 QuickSort(r,pivot+1,end);//遞迴實現對右側子序列的快速排序 } }