排序——直接選擇排序(簡單選擇排序)
阿新 • • 發佈:2017-05-23
無序 代碼 .... 插入排序 相對 方法 import 排序 color
直接選擇排序也稱簡單選擇排序,是一種相對簡單的排序算法,它的基本思想是:從一列數中找出最小的,和第一個交換;剩下的重新找出最小的,和這列數的第二個交換,......一直進行n-1次比較之後,該數列已經為有序數列了。
例如:已知一組無序數列:6 3 5 1 4 2 9
第一次:[6 3 5 1 4 2 9] 最小數為:1
第二次:1 [3 5 6 4 2 9] 最小數為:2
第三次:1 2 [5 6 4 3 9] 最小數為:3
第四次:1 2 3 [6 4 5 9] 最小數為:4
第五次:1 2 3 4 [6 5 9] 最小數為:5
第六次:1 2 3 4 5 [6 9] 最小數為:6
第七次:1 2 3 4 5 6 [9] 已經為有序數列了。
代碼實現(Java語言):
import java.math.BigDecimal; import java.math.RoundingMode; import java.util.Scanner; public class Main{ // public final static double pi = 3.1415927; public static void main(String[] args) { Scanner sin=new Scanner(System.in); while(sin.hasNextInt()){int len = sin.nextInt();//輸入數組的長度 int array[] = new int[100]; for(int i=0; i<len; i++){ array[i] = sin.nextInt();//以此輸入無序數組 } S_sort(array, len);//直接插入排序 display(array, len);//顯示排序之後的有序數列 } } public static void display(intarray[],int len){ for(int i=0; i<len; i++){ System.out.print(array[i]+" "); } } public static void S_sort(int array[],int len){ for(int i=0; i<len; i++){ int min = i; for(int j=i+1; j<len; j++){ if(array[j]<array[min]){ min = j; } } int temp = array[min]; array[min] = array[i]; array[i] = temp; } } }
效率分析:
在直接選擇排序中,共需要進行n-1次選擇和交換,每次選擇需要進行 n-i 次比較 (1<=i<=n-1),而每次交換最多需要3次移動,因此,總的比較次數C=(n*n - n)/2, 總的移動次數 3(n-1).由此可知,直接選擇排序的時間復雜度為 O(n^2) ,這就意味值在n比較小的情況下,選擇排序算法可以保證一定的速度,但當n足夠大時,算法的效率會降低。所以使用時要註意所以當記錄占用字節數較多時,通常比直接插入排序的執行速度快些。 由於在直接選擇排序中存在著不相鄰元素之間的互換,因此,直接選擇排序是一種不穩定的排序方法。
排序——直接選擇排序(簡單選擇排序)