冒泡排序和选择排序

2017-02-28  本文已影响0人  AiSheiShei

冒泡排序

冒泡排序是两两进行比较
列如有一个数值如下

 int[] arr1 = {5,2,3,6,1}

5和2比较2比5小那么2和5调换位置
调换后的数组如下

int[]arr1 = {2,5,3,6,1}

然后5在和3比较3比5小在调换位置
5在和6比较5比6小不在调换位置
调换后的数组如下

int[]arr1 = {2,3,5,6,1}

现在最小的数值还在最后那么还要在次作比较
2和3比较3和5比较5和6比较6和1比较6比1大
那么6和1调换位置
调换后的数组如下

int[]arr1 = {2,3,5,1,6}

如此比较下去一直到数组里最小的数值在第一位
如:

int[]arr1 = {1,2,3,5,6}

如何实现上面的方法,就要利用到for循环嵌套
全部代码如下:

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

        }
    }
    for (int i:arr1) {
        System.out.println(i);

    }

最外层for里的arr1.length是数组的长度减去1是因为冒泡排序是两两比较的,
而例子里的数组里面的元素个数是5个两两比较最多只能是进行4次
所以外层for里的写法是arr1.length-1.

里层的for的arr1.length-1-i,是因为每一次的循环都会比较出一个数值,每一次有底至上的上升
所以每一次都会都会找出一个最大的元素那么这个最大的元素就不用再比较了所以里层for的
写法是arr1.length-1-i.

if判断里的条件的意思是arr1[j]位置上的元素是否大于arr1[j+1]位置上的元素

 int temp = arr1[j + 1];
 arr1[j + 1] = arr1[j];
 arr1[j] = temp;

这段代码的意思是
当满足if里的判断条件的时候那就要定义一个int类型的temp(变量名)来承接arr1[j+1]上
的数值,在把arr1[j]上的值在赋值给arr1[j+1],再把temp上所携带的值赋值给arr1[j]这样
就完成了位置的交换.

 for (int i:arr1) {
        System.out.println(i);

    }

这段代码是把数组中排列好的元素循环便利出来,在打印.

选择排序

选择排序是用数组中的第0个位置上的元素和第1个位置上与元素比较
在和第2个位置上的元素比较,一直比较到最后一个,如果有比他小的就
交换位置,然后在那0位置上的元素比较,一直到没有比第0位置上的元素
在小的了,在哪第1位置上的元素比较,以此类推一直到最后一个元素.

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

内层for的i+1的意思是当为0是他的循环是在数组的1位置开始比较的.

上一篇下一篇

猜你喜欢

热点阅读