天天看點

選擇排序-不穩定

選擇排序也是一種簡單直覺的排序算法。它的工作原理很容易了解:初始時在序列中找到最小(大)元素,放到序列的起始位置作為已排序序列;然後,再從剩餘未排序元素中繼續尋找最小(大)元素,放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。

  注意選擇排序與冒泡排序的差別:冒泡排序通過依次交換相鄰兩個順序不合法的元素位置,進而将目前最小(大)元素放到合适的位置;而選擇排序每周遊一次都記住了目前最小(大)元素的位置,最後僅需一次交換操作即可将其放到合适的位置。

package cn.com.sort;

import org.junit.Test;

public class Select {

@Test

public void selectSort(){

int a[] = { 8, 5, 2, 6, 9, 3, 1, 4, 0, 7 }; // 從小到大選擇排序

int n = a.length;

for(int i=0;i<n-1; i++){// i為已排序序列的末尾

int min = i;//标記

for(int j=i+1;j<n;j++){

if(a[j] < a[min]){//後一個數與前面一個數比較,找出最小值

min = j;

}

}

if(min != i){// 放到已排序序列的末尾,該操作很有可能把穩定性打亂,是以選擇排序是不穩定的排序算法

int temp = a[min];

a[min] = a[i];

a[i] = temp;

}

}

for(int i=0;i<n;i++){

System.out.println(a[i]);

}

}

}

繼續閱讀