##Java中选择排序和冒泡排序简析

2017-03-01  本文已影响0人  Allenbin5522

简单来说无论选择排序还是冒泡排序,都是让数组有序化的一种方法,比如一个数组中的一串数字,我们现在希望这组数字能够从小到大,或是从大到小的排列,以便我们对数据的管理,这是就需要了排序。但是实现的思想却略有差异而已,下面我门以同一个数组为例,简析一下两者实现过程上的差异。

数组 int[] arr = {5, 2, 3, 6, 1};

选择排序
思想:每一次排序过程,我们获取当前没有排好序中的元素,从第一个元素开始,依次与其之后的元素比较,两者更小的数排到第一位,然后将第一位的这个数继续与下一位的数比较,直到第一位得到数组中的最小的数。然后从第二位继续上述的操作,以此类推循环这个过程即可实现对整个数组排序。

//我们可以假设有一个标签,最开始的时候指向第一位的数
//i < arr.length - 1是因为从第一位的数,到最后一位的数只需比较arr.length - 1次
//这层循环决定标签在第一位时,比较arr.length - 1次,在这一位比较完成后,标签后移一位,然后以此类推。
for (int i = 0; i < arr.length - 1; i++){
            //这层循环决定标签在这一位时,这一位的数和后面的数继续比较
            for (int j = i + 1; j < arr.length; j++) {                   
                if (arr[i] > arr[j]){
                    int temp = arr[j];
                    arr[j] = arr[i];
                    arr[i] = temp;   //第i位的元素和j位的元素互换
                }
            }
        }
        for(int i: arr){
            System.out.println(i);
        }

从结果来看,第一次比较后的结果依次是 {2, 5, 3, 6, 1} {2, 5, 3, 6, 1} {2, 5, 3, 6, 1} {1, 5, 3, 6, 2},其目的就是将数组中最小的数(1)放倒第一位,然后再进行第二次比较,将
倒数第二小的数(2)放到第二位,以此类推。

冒泡排序
思想:每一次排序过程,通过相邻元素的交换,将当前没有排好序中的最大(小)移到数组的最右(左)端,以达到数组从小到大(从大到下)排序的目的。

int[] arr2 = {5, 2, 3, 6, 1};
        for (int i = 0; i < arr2.length - 1; i++) {
            for (int j = 0; j < arr2.length -1 - i; j++) {
                if (arr2[j] > arr2[j+1]){
                    int temp = arr2[j+1];
                    arr2[j+1] = arr2[j];
                    arr2[j] = temp;
                }
            }
        }
        for(int i: arr2){
            System.out.println(i);
        }

分步来看,在第一次的比较过程中,依次得到的结果是 {2,3,5,1,6} {2,3,1,5,6} {2,1,3,5,6} {1,2,3,5,6},不难看出,第一次比较的结果就是将数组中最大的数(6)排到了最后一位,然后第二次比较后的结果就是将剩余的数里最大的那个(5)排到了倒数第二位,然后一次类推。

上一篇下一篇

猜你喜欢

热点阅读