兩種簡單的陣列排序演算法:氣泡排序和直接選擇排序(升序)
阿新 • • 發佈:2018-12-30
氣泡排序的基本思想是:面對一排資料,先從前往後兩兩比較,如果前一個數比後一個數大就交換兩者的順序,即第一個數和第二個數比,第二個數和第三個數比,……,倒數第二個數和最後一個數比,這樣一輪下來以後最大的數就排到最後;接著把除去最大的數的該組資料進行同樣的操作,直至這組數只剩下一個,排序結束。
以下為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+" ");
}
}
以上為自娛自樂