public static void main(String[] args) { /** * 冒泡排序 * 思路:每个轮次都让第一个数和其后所有的数进行轮比较,如果这轮的第一个数大则和其下一个数交换位置,如果他一直大则冒泡的最后一位 * 1、除了最后一位,前面的数都需要进行冒泡 * 2、第一轮,第一个数进行冒泡,和其后的数进行比较 * 3、第二轮,新序列的第一个数进行冒泡 */ int[] ary=new int[]{90,50,40,60,55}; //外层循环控制有多少个数需要比较的轮数,最原始最后一位数不需要冒泡,数组长度减一 for (int i=1;i<ary.length;i++){ //内层循环控制每个轮次的第一个数比较换位的过程 for (int j=0;j<ary.length-1;j++){ //如果这个轮次的第一个数大于其后的数就一直换位,直到比他大的数出现,不换位了,新的序列生成 if (ary[j]>ary[j+1]){ int tmp; tmp=ary[j]; ary[j]=ary[j+1]; ary[j+1]=tmp; } } } //foreach()遍历输出 for (int i:ary){ System.out.print(i+"\t"); }}运行结果:
public static void main(String[] args) { /** * 选择排序 * 思路:从剩余数组中选择最小的数并获取它的的下标,然后把最小的数与剩余数组的第一个数进行交换位置 */ int[] ary=new int[]{90,50,40,60,55}; //外层循环表示从剩余数组寻找最小值的轮数,数组长度为5的话,寻找4轮 for (int i=0;i<ary.length-1;i++){ //假定的最小值的下标,第一轮为ary[0],每次为剩余数组的第一个数 int minindex=i; //j=i表示从剩余数组中查找最小数的下标 for (int j=i;j<ary.length;j++){ //如果假定的最小值大于其后的数,则更换下标 if (ary[minindex]>ary[j]){ minindex=j; } } if (ary[i]!=ary[minindex]){ int tmp; tmp=ary[i]; ary[i]=ary[minindex]; ary[minindex]=tmp; } } //foreach()遍历输出 for (int a:ary){ System.out.print(a+"\t"); }}
运行结果:
public static void main(String[] args) { /** * 插入排序 * 思路:第一轮,先把第一个数当成一个有序数组,把剩余的数从第一个开始逐个往假定的有序数组中插入,插入后还是有序的, */ int[] ary=new int[]{50,30,40,10,20}; //错误思路// for (int i=1;i<5;i++){// for (int j=0;j<i;j++){// if (ary[j]>ary[i]){// int t;// t=ary[j];// ary[j]=ary[i];// ary[i]=t;// }// }// } for (int i=1;i<5;i++){ int tmp=ary[i]; int j; //i代表假定的有序数组的长度,i-1代表有序数组的最后一位的下标 for ( j=i-1;j>=0;j--){ //如果有序数组中的数大于待插入的数,则此数和其后的数都向后移动一位 if (ary[j]>tmp){ ary[j+1]=ary[j]; }else{ break; } } //循环结束后,插入待插入的数,这个时候j的值是-1或者是有序数组中比待插入数小的数的下标,不加1的话会插错位置,所以j要加1 ary[j+1]=tmp; } //使用Arrays工具类对数组排序 Arrays.sort(ary); //foreach()遍历输出 for(int a:ary){ System.out.print(a+"\t"); } }
运行结果:
原文地址:https://www.cnblogs.com/liusir123/p/11393671.html
时间: 2024-08-29 15:00:55