zoukankan      html  css  js  c++  java
  • 冒泡和选择,我必须区别你们俩

    一直没怎么研究排序的东西,去年看了快速排序,相当强大的感觉,而自己一贯说到排序就想起冒泡,可是一写代码起来总是写成选择,而我却一直把它当做是冒泡,真是坑。这次记录起来,以后就不会忘记了!

    排序规则:从小到大

    冒泡:就是一组数中,从头到尾一次前后两个数顺序地比较,一旦发现前数大于后数,立马交换值。代码如下:

    package net.dont.sort;
    /**
    * 关于冒泡排序
    */
    public class TestBubble {

    /**
    *
    @param args
    */
    public static void main(String[] args) {
    TestBubble tb = new TestBubble();
    int[] a = {1,8,5,6,3,7,5,4,8,9,12,2};
    tb.bubbleSort(a);
    for(int c : a){
    System.out.println(c);
    }
    }
    static void bubbleSort(int[] array){
    if(array.length == 0)return ;
    for(int i=0;i<array.length-1;i++){//i是计数标记
    for(int j=0;j<array.length-i-1;j++){//注意终止条件的判断,冒泡的亮点在于从头到尾一对一对比较
    if(array[j]>array[j+1]){
    swap(array, j, j+1);
    }
    }
    }
    }
    static void swap(int[] array,int i,int j){
    int temp = array[i];
    array[i] = array[j];
    array[j] = temp;
    }

    }

    第一个for的i变量是用来累计比较组次的.

    选择排序:就是在整一组里先以第一个位置作为起点,让上面的数跟后面的所有数依次进行比较,其中一旦发现有更小的数,就交换;全部比较完之后就已经把最小值放到了第一位了,然后就是从第二位开始,下面不说了,直接看代码:

     1 package net.dont.sort;
    2 /**
    3 * 选择排序
    4 */
    5 public class TestSelectSort {
    6
    7 /**
    8 * @param args
    9 */
    10 public static void main(String[] args) {
    11 TestSelectSort ts = new TestSelectSort();
    12 int[] a = {1,8,5,6,3,7,5,4,8,9,12,2};
    13 ts.selectSort(a);
    14 for(int c : a){
    15 System.out.println(c);
    16 }
    17 }
    18
    19 static void selectSort(int[] array){
    20 if(array.length == 0)return ;
    21 for(int i=0;i<array.length-1;i++){
    22 for(int j=i+1;j<array.length;j++){
    23 if(array[i]>array[j]){
    24 swap(array, i, j);
    25 }
    26 }
    27 }
    28 }
    29
    30 static void swap(int[] array,int i,int j){
    31 int temp = array[i];
    32 array[i] = array[j];
    33 array[j] = temp;
    34 }
    35
    36 }

    这次,第一个for中的变量i不在是指次数,而是代表第某个数的位置,比如i=0,表示array[i]是要用来装最小值的。而j是遍历i后面元素的索引。

    比较完毕!

  • 相关阅读:
    java.util.Arrays类详解
    爬虫
    学习Spring框架(一)
    JAVA的网络编程
    Thread直接调用run()和start()方法的区别
    JDK JRE JVM 区别
    TCP , HTTP, IP
    一些常用的端口
    PATH CLASSTH JAVA_HOME
    浅谈Linux内存管理机制
  • 原文地址:https://www.cnblogs.com/dont27/p/2400928.html
Copyright © 2011-2022 走看看