交换类排序:冒泡,快速(递归与非递归)

来源:互联网 发布:算法第四版高清pdf 编辑:程序博客网 时间:2024/05/01 04:15
<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;}}}


                                             
1 0