java实现排序

来源:互联网 发布:淘宝怎么投诉盗用图片 编辑:程序博客网 时间:2024/05/19 19:56
package practice5;public class array {//直接插入排序public static void insertsort(int[]table){for(int i=1;i<table.length;i++){//n-1趟扫描,每趟将table[i]插入到它前面已排序的子序列中int temp=table[i],j;   for(j=i-1;j>-1&&temp<table[j];j--){   //将前面大于temp的元素向后移动                table[j+1]=table[j];}table[j+1]=temp;   //temp值到达插入位置}}//希尔排序public static void shellsort(int[] table){for(int delta=table.length/2;delta>0;delta/=2){  //控制增量,增量减半,若干趟扫描for(int i=delta;i<table.length;i++){ //一趟中若干组,每个元素在自己组内进行直接插入排序int temp=table[i];   //当前待插入元素int j=i-delta;     //组内两个元素之间相距delta远while(j>-1&&temp<table[j]){   //一组中大于temp的元素向后移table[j+delta]=table[j];j-=delta;      //继续与前面元素比较}table[j+delta]=temp;   //插入元素位置}}}//冒泡排序public static void bubblesort(int[]table){for(int i=1;i<table.length;i++)   //进行n-1趟排序for(int j=0;j<table.length-i;j++){  //进行一次比较,交换if(table[j]>table[j+1]){int temp=table[j];table[j]=table[j+1];table[j+1]=temp;}}}//快速排序public static void quicksort(int[] table){quicksort(table,0,table.length-1);}public static void quicksort(int[]table,int low,int high){if(low<high){    //如果序列有效,用于结束递归时使用int i=low,j=high;int vot=table[i];   //第一个值作为基准值while(i!=j){     while(i<j&&vot<table[j])   //从后向前寻找比vot小的值j--;          //若找不到则继续向前寻找,若找到则跳出循环if(i<j){       table[i]=table[j];   //将比vot小的值向前移动i++;}while(i<j&&vot>table[i])   //从前往后寻找比vot大的值i++;      //若找不到则继续向后寻找,若找到则跳出循环if(i<j){table[j]=table[i];  //将比vot大的值向后移动j--;}}table[i]=vot;   //基准值的最终位置quicksort(table,low,j-1);  //前端子序列再排序quicksort(table,i+1,high);  //后端子序列再排序}}//直接选择排序public static void selectsort(int[] table){for(int i=0;i<table.length-1;i++){   //n-1趟排序每趟从table[i]开始的子序列中寻找元素int min=i;    //设第i个数据元素最小for(int j=i+1;j<table.length;j++)  //在子序列中查找最小值if(table[j]<table[min])min=j;    //记住最小元素的下标if(min!=i){    //将本趟最小元素交换到前面int temp=table[i];table[i]=table[min];table[min]=temp;}}}//堆排序 ,将以low为根的子树调整成最小堆,low,high是序列的上下界public static void sift(int[]table,int low,int high){int i=low;      //子树的根int j=2*i+1;   //j为i结点的左孩子int temp=table[i];  //获得第i个元素的值while(j<=high){   //沿较小值孩子结点向下筛选if(j<high&&table[j]>table[j+1])  //如果左孩子结点大于右孩子结点j++;   if(temp>table[j]){   //如果父母节点大于孩子结点table[i]=table[j];  //孩子结点中较小值上移i=j;    //i,j向下一层j=2*i+1;}elsej=high+1;    //如果j>high,退出循环}table[i]=temp;  //当前子树的原根值调整后的位置}public static void heapsort(int[]table){int n=table.length;for(int j=n/2-1;j>=0;j--)   //创建最小堆sift(table,j,n-1);for(int j=n-1;j>0;j--){   //每趟将最小值交换到后面,再调整成堆int temp=table[0];table[0]=table[j];table[j]=temp;sift(table,0,j-1);}}        //归并排序      public static void merge(int[]x,int[]y,int m,int r,int n){   //一次归并int i=m,k=m,j=r;while(i<r&&j<r+n&&j<x.length){   //将x中两个相邻子序列归并到y中if(x[i]<x[j])     // 较小值复制到y中y[k++]=x[i++];elsey[k++]=x[j++];}while(i<r)    //将前一个子序列剩余元素复制到y中y[k++]=x[i++];while(j<r+n&&j<x.length)   //将后一个子序列剩余元素复制到y中y[k++]=x[j++];}public static void mergepass(int[]x,int[]y,int n){  //一趟归并int i=0;while(i+2*n<x.length){   //一趟归并中进行归并的次数merge(x,y,i,i+n,n);i+=2*n;}if(i+n<x.length)    //归并两个长度不等的有序表merge(x,y,i,i+n,n);elsefor(int j=i;j<x.length;j++)   //将x剩余元素复制到y中y[j]=x[j];}public static void mergesort(int[] x){int n=1;   //定义子序列长度n为1int[]y=new int[x.length];   //y数组长度同x数组while(n<x.length){    //子序列长度小于xmergepass(x,y,n);  //一趟归并,将x数组中各子序列归并到y中n*=2;   //子序列长度加倍if(n<=x.length){mergepass(y,x,n);   //将y数组中各子序列再归并到x中n*=2;  }}}public static void main(String[] args){array a=new array();int[] table={10,9,5,8,16,7,90,22,23};System.out.println("归并排序");a.mergesort(table);for(int i=0;i<table.length;i++)System.out.print(table[i]+" ");}}

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 房子已过户新业主不交物业费怎么办 村委会欠百姓征地补偿款不给怎么办 因为近亲人人都不看好的婚姻怎么办 碰到工作中特别积极的同事怎么办 丈夫车祸死亡妻子和孩子以后怎么办 丈夫死后妻子改嫁儿子不同意怎么办 满了60岁社保没满15年怎么办 捷豹的dpf灯亮了怎么办 朋友如新直销产品是你该怎么办 传福音接受了却被家人拦阻该怎么办 奶奶出钱由孙子抓奖中奖后怎么办 我不想学车了驾校不同意退学怎么办 2017年大学挂科面临退学怎么办 微信重新登录后东西全没了怎么办 宝宝吃鸡蛋过敏全身起红疹怎么办 180在产蛋鸡因断鸡减产怎么办 住友39熔接机熔接损耗大怎么办 支付宝实名认证刷脸失败怎么办 支付宝注册刷脸不是本人怎么办 小学科学只考88分中学怎么办 收银机关机时才上传数据是怎么办 刚做的系统玩cf卡屏怎么办 办健康证的资料掉了怎么办 刚刚办得的健康证掉了怎么办 房子都过户了银行贷不了款怎么办 我要办大病迁出应该怎么办啊? 遗产继承后户口没地迁出怎么办 安徽蒙城怎么办去韩国的签证的 夜间有人私自收停车费应该怎么办 上次摸不到环尾丝这次摸到了怎么办 法院判决书下来后对方不给钱怎么办 法院判决书下来了钱还保全么怎么办 深圳路边泊车不知道泊车编号怎么办 当事人进拘留所了我的工资怎么办 昆明公租房住满5年后怎么办 昆明公租房房子到期缴纳金怎么办 看守所犯人银行卡里钱没用完怎么办 中国邮政迟迟没有把信件寄到怎么办 拘留15天放出来还不肯还钱怎么办 人死在拘留所不让看监控怎么办 家人吸毒可他又不愿强戒怎么办