排序问题
一、冒泡排序:(Bubble Sort),是一种计算机科学领域的较简单的排序算法。
-
它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。
1 //定义冒泡排序方法 2 public static int[] Bubble_sort(int[] arry_int) { 3 int lenth=arry_int.length; 4 //外层循环 5 for (int i=0;i<lenth;i++) { 6 //内层循环 7 for(int j=0;j<lenth-i-1;j++) { 8 //判断相邻两个数是大小 9 if(arry_int[j]>arry_int[j+1]) { 10 //如果前者比后者大 定义临时变量替换两者的值 11 int temp = arry_int[j+1]; 12 arry_int[j+1]=arry_int[j]; 13 arry_int[j]=temp; 14 } 15 } 16 } 17 18 19 return arry_int; 20 }
- 以上是个人写的冒泡排序方法 总结来说,有两个地方需要注意,双层嵌套循环中 内层循环需要注意 用外层循环的便利来做限制 会使得循环册数减少一半,提高效率,还有一个是需要注意,因为内层循环涉及到小标+1 需要注意不要数组越界 否则会导致程序报错。
1 //定义选择排序 2 public static int[] Selection_sort(int[] arry_int) { 3 int lenth=arry_int.length; 4 int temp=0; 5 int temp_arry=0; 6 //定义外层循环 7 for(int j=0;j<lenth;j++) { 8 //定义临时变量 存储循环中的最小值 9 temp=arry_int[j]; 10 //定义临时变量 存储最小值下标 11 temp_arry=j; 12 //定义内层循环 13 for(int i=j;i<lenth-1;i++) { 14 //循环中比对 当前值是否比下一个值小 15 if(temp>arry_int[i+1]) { 16 //如果当前值小 则把树枝存储在临时变量 并且记录下标 17 temp_arry=i+1; 18 temp=arry_int[i+1]; 19 } 20 } 21 //通过临时变量 替换数组的数据 22 arry_int[temp_arry]=arry_int[j]; 23 arry_int[j]=temp; 24 } 25 return arry_int; 26 }
- 需要注意的是 每次循环拿到最小值 然后把最小值存储在临时变量 通过一次遍历之后,把最小值拿到 ,然后替换到数组 第二次遍历时,要把已经有序的过滤掉,我这边使用的方法是把外层循环的值作为内层循环的初始值,这样的话,就可过滤掉之前有序的数组