Java冒泡排序与选择排序的区别
前些天误把冒泡排序当作选择排序,幸亏博友及时指正。今天就来说说这两者的区别。
冒泡排序
它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
代码如下:
1 public class nums { 2 public static void main(String[] args){ 3 int []nums = {5,4,3,2,1}; 4 for(int i = 0; i < nums.length; i++){ 5 for(int j = 0; j < nums.length-i-1; j++){ 6 if(nums[j] > nums[j+1]){ 7 int temp = nums[j]; 8 nums[j] = nums[j+1]; 9 nums[j+1] = temp; 10 } 11 } 12 for(int x = 0;x < nums.length;x++){ 13 System.out.print(nums[x]+","); 14 } 15 System.out.print("\n"); 16 } 17 } 18 }
每一轮比较后的输出如下:
1 4,3,2,1,5, 2 3,2,1,4,5, 3 2,1,3,4,5, 4 1,2,3,4,5, 5 1,2,3,4,5,
从输出中可以很清楚的明白冒泡排序的算法流程。
选择排序
每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。
代码如下:
1 public class nums { 2 public static void main(String[] args){ 3 int []nums = {5,4,3,2,1}; 4 for(int i = 0; i < nums.length; i++){ 5 for(int j = i+1; j < nums.length; j++){ 6 if(nums[i] > nums[j]){ 7 int temp = nums[i]; 8 nums[i] = nums[j]; 9 nums[j] = temp; 10 } 11 } 12 for(int x = 0;x < nums.length;x++){ 13 System.out.print(nums[x]+","); 14 } 15 System.out.print("\n"); 16 } 17 } 18 }
从代码中可以看出每轮比较中,nums[i]和数组中的每个元素都有作比较。
每一轮比较后的输出如下:
1 1,5,4,3,2, 2 1,2,5,4,3, 3 1,2,3,5,4, 4 1,2,3,4,5, 5 1,2,3,4,5,
从输出结果中还是很容易看出它与冒泡排序在算法上的区别。
非常感谢博友 啊超~的指正,不然我可能永远都不知道我是错的。若有错误之处还望各位不吝赐教!