/* 需求分析:选择排序图示: 0-1 0-2 0-3 0-4 0-5 1-2 2-3 3-4 4-5 2-3 3-4 4-5 3-4 4-5 4-5 通过分析 可以看出是个倒三角形,我们可以用两个for循环嵌套的模式来打印出来 相比较的都是角标位。 */ class XZDemo { public static void paiqian(int[] arr) //该方法是顺序打印数组的全部元素 { for(int x=0;x<arr.length;x++) { if(x!=arr.length-1) //判断只要不是最后一个元素,则在打印后加一个“,”;否则打印元素且换行 System.out.print(arr[x]+","); else System.out.println(arr[x]); } } public static void main(String[] args) //main方法 { int[] arr={5,6,9,12,55,78,43}; //System.out.println("qian="); paiqian(arr); //输出排序前的数组 pai(arr); //对数组进行排序 paiqian(arr); //输出排序后的数组 } public static void pai(int[] arr) //这是选择排序的方法 { for(int x=0;x<arr.length-1;x++) //外循环,保证数组中的每一个元素都可以进入内循环与其他元素比较 { for(int y=x+1;y<arr.length;y++) //内循环,将起始元素与其后面的每一个元素比较,不比较该元素前面的 { if(arr[x]>arr[y]) //如果arr[x]的值大于所比较元素的值,则交换位置 { int temp=arr[x]; arr[x]=arr[y]; arr[y]=temp; } } } } } 这个可以 为什么? 具体解释见注释 /*0-1 1-2 2-3 3-4 4-5 每增加一个 减少一个 y的值在减少 0-1 1-2 2-3 3-4 0-1 1-2 2-3 0-1 1-2 0-1 先初始化的是最后的一个角标 */ class MpDemo { //定义一个功能,为了遍历数组中的元素。 public static void paiqian(int[] arr) { for(int x=0;x<arr.length;x++) { if(x!=arr.length-1) System.out.print(arr[x]+","); else System.out.println(arr[x]); } } public static void main(String[] args) { int[] arr={35,23,43,54,65,56}; paiqian(arr); maopao(arr); System.out.println("paihou="); paiqian(arr); } public static void maopao(int[] arr) //冒泡排序方法 { for(int x=0;x<arr.length-1;x++ ) //外循环,保证每一个元素都参与比较 { for(int y=0;y>arr.length-1-x;y++)//为什么减1 为了避免越界 -x是让逐轮比较元素递减。 { if(arr[y]>arr[y+1]) //如果前面的元素大于后面的元素,则交换位置 { int temp = arr[y]; arr[y]=arr[y+1]; arr[y+1]=temp;//选择和冒泡 区别在于 什么和什么相比较。 } } } } } 这个 可以又为什么啊? 具体解释见注释! 求正解!!!求分析 ,求分配图!求详细说明 两个一个可以 另一个不可以为什么? |
冒泡排序.PNG (29.46 KB, 下载次数: 46)
冒泡排序
选择排序.PNG (38.34 KB, 下载次数: 48)
选择排序
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |