会员
周边
众包
新闻
博问
闪存
赞助商
Chat2DB
所有博客
当前博客
我的博客
我的园子
账号设置
简洁模式
...
退出登录
注册
登录
Java EE
博客园
首页
新随笔
联系
管理
订阅
排序算法-选择排序
选择排序
private static int leftChild(int i){ return 2*i+1; } private static void perc(int[] a,int i,int n){ //调整堆的方法 int child; int temp; for(temp=a[i];leftChild(i)<n;i=child){ child=leftChild(i); if(child!=n-1&&a[child]<a[child+1])//比较左右孩子的大小 child++; if(temp<(a[child])) //根节点小于左右孩子 a[i]=a[child]; else break; } a[i]=temp;// } public static void heaps(int[] a){ //堆排序的地方法 for(int i=a.length/2;i>=0;i--){ //初始化堆,从最后一个非终端节点至根节点 perc(a,i,a.length); } for(int i=0;i<a.length;i++){ //重复执行移走对顶及重建堆的操作 int temp=a[0]; a[0]=a[a.length-i-1]; a[a.length-i-1]=temp; perc(a, 0, a.length-i-1); //重建堆 } } public static void main(String[] args) { int r[]={50,40,45,36,32,18,22,30}; System.out.println("原始的序列:"); for(int i=0;i<8;i++){ System.out.print(" "+r[i]); } heaps(r); System.out.println("\n"+"排序好的序列:"); for(int i=0;i<8;i++){ System.out.print(" "+r[i]); } }
public static void sift(int[] r,int k,int m){ int i=k; int j=2*i; while(j<=m){ if(j<=m&&r[j]<r[j+1]){ j++;} if(r[i]>r[j]) break; else{ int temp; temp=r[i]; r[i]=r[j]; r[j]=temp; i=j; j=2*i; } } } public static void heasp(int r[],int n){ int i; for(i=n/2;i>=0;i--){ sift(r, i, n); } for(i=0;i<n;i++){ int temp=r[0]; r[0]=r[n-i+1]; r[n-i+1]=temp; sift(r, 1, n-i); } for( i=0;i<8;i++){ System.out.print(" "+r[i]); } } public static void main(String[] args) { int a[]={50,40,45,36,32,18,22,30}; heasp(a,7); }
public static void main(String[] args) { int r[]={49,27,65,97,76,13,38,5,12,56}; int i,j,index,temp; System.out.println("初始序列的数组为:"); for(i=0;i<10;i++){ //对n个记录进行n-1趟的选择排序 System.out.print(r[i]+" "); } for(i=0;i<9;i++){ index=i; //初始化第i趟选择排序的最小记录的指针 for(j=i+1;j<10;j++){ //在无序区选取最小记录 if(r[j]<r[index]){ index=j; } } if(index!=i){ //将最小记录与r[i]交换 temp=r[i]; r[i]=r[index]; r[index]=temp; } } System.out.println("\n"+"排序好的数组为:"); for(i=0;i<10;i++){ System.out.print(r[i]+" "); } }
posted @
2012-05-09 21:22
Java EE
阅读(
149
) 评论(
0
)
编辑
收藏
举报
刷新页面
返回顶部
公告