<pre name="code" class="cpp">交换类排序:1:冒泡排序O(n^2),空间复杂度O(1) 2:快速排序O(n乘以log以2为底,n的对数),空间复杂度O(log以2为底,n的对数) //冒泡排序 void BubbleSort(int R[],int n) { int i,j,tmp,flag; for(i=0;i<n-1;i++) { flag=0; for(j=n-1;j>i;j--) { if(R[j]<R[j-1]) { tmp=R[j]; R[j]=R[j-1]; R[j-1]=tmp; flag=1; } } if(flag==0) return; } } //快速排序 void QuickSort(int R[],int s,int t) { int i=s,j=t; int tmp; if(s<t) { tmp=R[s]; while(i!=j) { while(j>i && R[j]>tmp) j--; R[i]=R[j]; while(i<j && R[i]<tmp) i++; R[j]=R[i]; } R[i]=tmp;//最后一个[i]给了别人,此处的值没有用了,用来存放基准值 QuickSort(R,s,i-1); QuickSort(R,i+1,t); } } //快速排序的非递归算法 void QuickSort(int R[],int n) { int i,j,low,high,top=-1; int temp; struck { int low; int high; }St[MAXITEM]; top++; St[top].low=0; St[top].high=n-1; while(top>-1) { //出栈 low=St[top].low; high=St[top].high; top--; i=low; j=high; if(low<high) { temp=R[low]; while(i!=j) { while(i<j && R[j]>temp) j--; R[i]=R[j]; while(i<j && R[i]<temp) i++; R[j]=R[i]; } R[i]=temp; //入栈 top++; St[top].low=low; St[top].high=i-1; top++; St[top].low=i+1; St[top].high=high; } } }
时间: 2024-10-06 18:12:07