java算法篇---插入排序和選擇排序算法

插入排序

假設我們輸入的是 “5,1,4,2,3” 我們從第二個數字開始,這個數字是1,我們的任務只要看看1有沒有正確的位置,我們的做法是和這個數字左邊的數字來比,因此我們比較1和5,1比5小,所以我們就交換1和5,原來的排列就變成了“1,5,4,2,3 ”
接下來,我們看第3個數字有沒有在正確的位置。這個數字是4,它的左邊數字是5,4比5小,所以我們將4和5交換,排列變成了 “1,4,5,2,3 "我們必須繼續看4有沒有在正確的位置,4的左邊是1,1比4小,4就維持不動了。
再來看第四個數字,這個數字是2,我們將2和它左邊的數字相比,都比2大,所以就將2一路往左移動,一直移到2的左邊是1,這時候排序變成了 “1,2,4,5,3 ”
最後,我們檢查第五個數字,這個數字是3,3必須往左移,一直移到3的左邊是2爲止,所以我們的排列就變成了 “1,2,3,4,5 ”排序因此完成了。
所謂插入排序法,就是檢查第i個數字,如果在它的左邊的數字比它大,進行交換,這個動作一直繼續下去,直到這個數字的左邊數字比它還要小,就可以停止了。插入排序法主要的迴圈有兩個變數:i和j,每一次執行這個迴圈,就會將第i個數字放到左邊恰當的位置去。
代碼實現:
package com.zc.manythread;

/**
 * 插入排序
 * @author 偶my耶
 * 
 */
public class InsertionSort {
    public static void insertion_sort(int[] data) {// 
        for (int i = 1; i < data.length; i++) {
            if (data[i - 1] > data[i]) {
                int temp = data[i];
                int j = i;
                while (j > 0 && data[j - 1] > temp) {
                    data[j] = data[j - 1];
                    j--;
                }
                data[j] = temp;
            }
        }
    }

    public static void main(String[] args) {
        int[] data = { 6, 2, 4, 1, 5, 9 };
        insertion_sort(data);
        for (int i = 0; i < data.length; i++) {
            System.out.print(data[i] + "\t");
        }
    }
}



選擇排序

  選擇排序是一類藉助“選擇” 進行排序的方法。其主要思想是:沒趟排序在當前排序序列中選出關鍵碼最小的記錄,天機到有序序列中。選擇排序比較獨特的地方是:記錄的移動次數少。

選擇排序源代碼:

package com.zc.manythread;
/**
 * 選擇排序
 * @author Administrator
 *
 */
public class SelectSort {

    
    /**
     * 快速排序
     * @param date
     * @return
     */
    int[] SelectSort(int[] date){
        for (int i = 0; i < date.length-1; i++) {
            int index=i;
            for (int j = i+1; j < date.length; j++) {
                if (date[j]<date[index]) {
                    index=j;
                }
            }
            if (index!=i) {
                int temp=date[i];
                date[i]=date[index];
                date[index]=temp;
            }
        }
        return date;
        
    }
    /**************
     * 
     * 創建數組數據
     * *****************/
    private static int[]  createDate(int count) {
        int[] data=new int[count];
        for (int i = 0; i < data.length; i++) {
            data[i]=(int)(Math.random()*count);
        }
        return data;
    }
    /**************主函數*****************/
    public static void main(String[] args) {
        final int count=10;
        int[] data=createDate(count);
        for (int n:data) {
            System.out.print(n+"\t");
        }
        System.out.println();
        int[] data2=new SelectSort().SelectSort(data);
        for (int n:data) {
            System.out.print(n+"\t");
            }
        }
    }


 

博客地址: http://www.cnblogs.com/oumyye/
博客版權: 本文以學習、研究和分享爲主,歡迎轉載,轉載請務必註明出處,謝謝合作。
如果文中有不妥或者錯誤的地方請指出。如果覺得本文對你有所幫助不如【推薦】一下!如果你有更好的建議,不如留言一起討論,共同進步!
發佈了8 篇原創文章 · 獲贊 4 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章