1. 程式人生 > >兩種簡單的陣列排序演算法:氣泡排序和直接選擇排序(升序)

兩種簡單的陣列排序演算法:氣泡排序和直接選擇排序(升序)

氣泡排序的基本思想是:面對一排資料,先從前往後兩兩比較,如果前一個數比後一個數大就交換兩者的順序,即第一個數和第二個數比,第二個數和第三個數比,……,倒數第二個數和最後一個數比,這樣一輪下來以後最大的數就排到最後;接著把除去最大的數的該組資料進行同樣的操作,直至這組數只剩下一個,排序結束。
以下為Java語言描述,JUnit單元測試

@Test
public void orderTest(){
    int[]arr={1,5,3,8,12,7,23,18,15};
    System.out.println("排序前的陣列順序:");
    System.out.println();
    for
(int m : arr) { System.out.print(m+" "); } //氣泡排序法 for(int i=0;i<arr.length-1;i++) { for(int j=0;j<arr.length-1-i;j++) { if(arr[j]<arr[j+1]) { int temp=arr[j]; arr[j]=arr[j+1]; arr[j+1
]=temp; } } } System.out.println("排序後的陣列順序:"); for (int n : arr) { System.out.print(n+" "); } }

直接選擇排序的思想是:面對一排數,假設第一個數是最小的,將第一個數依次與後面的所有資料進行比較,如發現更小的就把該數的下標記錄下來,再將這個數與後面的數比較,一輪下來以後如果發現最小的數的下標不是第一個,就與第一個數交換,這樣就保證了第一個位置上的數是最小的;對除去第一個數的剩下的數做同樣的操作,多輪迴圈之後,直到剩下最後一個數,排序結束。
以下為Java語言描述,JUnit單元測試

@Test
public void orderTest1()
{
    int[]arr={1,5,3,8,12,7,23,18,15};
    System.out.println("排序前的陣列順序:");
    for (int m : arr) 
    {
        System.out.print(m+" ");
    }
    System.out.println();
    //自然選擇排序
    for(int i=0;i<arr.length-1;i++)
    {   
        int flag=i;//假設第flag個元素即為最小值,下面遍歷,遇到更小的就更新
        for(int j=i;j<arr.length;j++)
        {           
            if(arr[flag]>arr[j])
            {
                flag=j;
            }
        }
        if(flag!=i)//flag為這一輪最小的值,放到這一輪的第一個
        {
            int temp;
            temp=arr[i];
            arr[i]=arr[flag];
            arr[flag]=temp;
        }
    }
    System.out.println("排序後的陣列順序:");
    for (int m : arr) 
    {
        System.out.print(m+" ");
    }
}

以上為自娛自樂