1. 程式人生 > >排序——直接選擇排序(簡單選擇排序)

排序——直接選擇排序(簡單選擇排序)

無序 代碼 .... 插入排序 相對 方法 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(int
array[],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足夠大時,算法的效率會降低。所以使用時要註意所以當記錄占用字節數較多時,通常比直接插入排序的執行速度快些。 由於在直接選擇排序中存在著不相鄰元素之間的互換,因此,直接選擇排序是一種不穩定的排序方法。

排序——直接選擇排序(簡單選擇排序)