基本排序算法回顾(JAVA)

Java 基础之排序算法

最近回顾了一下几个基本的排序算法,包括排序,插入,选择。接来下就上代码回顾一下


冒泡排序

简要说来,冒泡排序就是对需要排序的数组进行遍历,然后从头开始依次两两比较大小,根据对应的比较要求进行左右互换,从头到尾轮一遍,然后第一次遍历结束后最大(小)的到了数组的末尾。举例如下:比如1 2 8 6 4 0 5,则进行第一次遍历比较过程如下:
1,2,8,6,4,0,5。(1,2比较)–>
1,2,8,6,4,0,5。(2,8比较)–>
1,2,6,8,4,0。(8,6比较,互换)–>
1,2,6,4,8,0。(8,4比较,互换)–>
1,2,6,4,0,8。(8,0比较)。一次遍历比较完成。

代码块

/**
 * Created by Ying  on 2017/7/2.
 */
public class BubbleSort {
    public static void main(String[] args) {
        int[] a = {1, 2, 5, 3, 9, 6, 7};
        sort(a);
        for (int i = 0; i < a.length; i++) {
            System.out.println(a[i]);
        }
    }

    public static void sort(int[] a) {
        int length = a.length;
        for (int i = 0; i < length; i++) {
            for (int j = 0; j < length - i - 1; j++) {
            //若降序,则下面的 > 改为 <
                if (a[j] > a[j + 1]) {
                    int temp = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = temp;
                }
            }
        }
    }
}

插入排序

插入排序,简单说来就是从最初的无序序列中,先选一个放到有序序列里,一般为第一个,然后从剩下的无序序列中依次选取需要排序的数值放入到有序序列中,此时要在有序序列中寻找适当的位置然后插入其中,这也就是为什么叫插入排序的原因。具体过程看如下代码:

代码块


/**
 * Created by ying on 2017/7/3.
 */
public class InsertSort {
    public static void main(String[] args) {
        int[] a = {1,2,4,3,9,0,6};
        sort2(a);
        for(int a1:a){
            System.out.println(a1);
        }

    }
    static void sort(int[] a) {
        int pass, i, temp;
        for (pass = 1; pass < a.length; pass++) {
            temp = a[pass];// the value would to be instered;
            for (i = pass - 1; i >= 0; i--)//内部循环,遍历已经排序完毕的队伍
                if (a[i] <= temp)
                    break;
                else
                    a[i + 1] = a[i];
            a[i + 1] = temp;
        }
    }

//降序排列
    static void sort2(int[] a){
        int pass,i,temp;
        for(pass=1;pass<a.length;pass++){
            temp = a[pass];
            for(i = pass-1;i>=0;i--){
                if(a[i]>=temp){
                    break;
                }else{
                    a[i+1] = a[i];
                }
            }
            a[i+1] = temp;
        }
     }
}

选择排序

选择排序,原理就是对原始的序列进行遍历,然后每次遍历中选取无序序列中的最大(小)的值,放到有序序列的末尾。在代码实现中,我们一般用一个变量标记当前的最大(小)值的索引,然后再将其与无序序列末尾的那个值进行互换。过程见如下代码:

代码块


/**
 * Created by admin on 2017/7/3.
 */
public class select {
    public static void main(String[] args) {
        int[] a = {1, 4, 5, 8, 2, 3, 9};
        sort2(a);
        for (int a2 : a) {
            System.out.println(a2);
        }
    }

    static void sort(int[] a) {
        int pass, i, temp, k;
        for (pass = 0; pass < a.length - 1; pass++) {
            for (i = pass, k = i; i < a.length; i++) {
                if (a[i] < a[k]) {
                    k = i;
                }
            }
            temp = a[pass];
            a[pass] = a[k];
            a[k] = temp;
        }
    }

    static void sort2(int[] a) {
        int pass, temp, i, k;
        for (pass = 0; pass < a.length; pass++) {
            for (i = pass, k = i; i < a.length; i++) {
                if (a[i] > a[k]) {
                    k = i;
                }
            }
             temp = a[pass];
            a[pass] = a[k];
            a[k] = temp;
        }

    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章