选择类排序:1:简单选择排序O(n^2),空间O(1) 2:堆排序O(n乘以log以2为底,n的对数),空间复杂度O(1) //选择排序 void SelectSort(int R[],int n) { int i,j,k; int tmp; for(i=0;i<n-1;i++) { k=i; for(j=i+1;j<n;j++) { if(R[j]<R[k]) k=j; } if(k!=i) { tmp=R[i]; R[i]=R[k]; R[k]=tmp; } } } //堆排序 void sift(int R[],int low,int high) { int i=low,j=2*i; int tem=R[i]; while(j<=high) { if(j<high && R[j]<R[j+1])//孩子最大的给双亲 j++; if(tmp<R[j]) { R[i]=R[j]; i=j; //以孩子为双亲,继续向下探索 j=2*i; } else break; } R[i]=tmp; } void HeapSort(int R[],int n) { int i; int tmp; for(i=n/2;i>=1;i--)//循环建立初始堆 sift(R,i,n); for(i=n;i>=2;i--) { tmp=R[1]; R[1]=R[i]; R[i]=tmp; sift(R,1,i-1); } }
时间: 2024-10-11 01:35:49