經典排序演算法--簡單選擇排序

來源:互聯網
上載者:User

標籤:位置   out   log   tin   blog   高效   public   bsp   結束   

演算法簡介

簡單選擇排序是一種選擇排序。

選擇排序:每趟從待排序的記錄中選出關鍵字最小的記錄,順序放在已排序的記錄序列末尾,直到全部排序結束為止。

白話理解

  依然已排隊為例,在排隊時,有的老師可能會選擇這樣排序,先在一列中選出最矮的,放在第一位,然後選出第二矮的,放在第二位。隊伍完成排序。而這就是選擇排序的思想。

簡單排序處理流程

(1)從待排序序列中,找到關鍵字最小的元素;

(2)如果最小元素不是待排序序列的第一個元素,將其和第一個元素互換;

(3)從餘下的 N - 1 個元素中,找出關鍵字最小的元素,重複(1)、(2)步,直到排序結束。

Java代碼實現:
 1 package sortDemo; 2  3 /** 4  * 插入代碼實現 5  * @author xianyu 6  * @CreatTime 下午8:16:11 7  */ 8 public class SelectionDemo { 9     10     public static void main(String[] args) {11         int[] sort ={3,2,1,4,6,5,8,9,10,7} ;12         System.out.println("排序前:");13         print(sort);14         selectionDemo(sort);15         System.out.println("\n排序後:");16         print(sort);17     }18     19     public static void selectionDemo(int[] a){20         for (int i = 0; i < a.length; i++) {21             for (int j = i+1; j < a.length; j++) {22                 if(a[j]<a[i]){23                     int tmp = a[j];24                     a[j] = a[i];25                     a[i]=tmp;26                 }27             }28         }29     }30     31     public static void print(int[] a){32         for (int i = 0; i < a.length; i++) {33             System.out.print(a[i]+" ");34         }35     }36 }
演算法分析:時間複雜度

簡單選擇排序的比較次數與序列的初始排序無關。 假設待排序的序列有 N 個元素,則比較次數總是N (N - 1) / 2。

而移動次數與序列的初始排序有關。當序列正序時,移動次數最少,為 0.

當序列反序時,移動次數最多,為3N (N - 1) /  2。

所以,綜合以上,簡單排序的時間複雜度為 O(N2)。 

空間複雜度

簡單選擇排序需要佔用 1 個臨時空間,在交換數值時使用。

 

由交換條件,a[j+1]<a[i]可以判斷出,相同的值並不會交換。所以簡單選擇排序是穩定排序。

簡單選擇排序的改進——二元選擇排序

簡單選擇排序,每趟迴圈只能確定一個元素排序後的定位。我們可以考慮改進為每趟迴圈確定兩個元素(當前趟最大和最小記錄)的位置,從而減少排序所需的迴圈次數。改進後對n個資料進行排序,最多隻需進行[n/2]趟迴圈即可。具體實現如下:

 1 static void selectSort(int[] r) {   2         int n = r.length; 3         int i ,j , min ,max, tmp;   4         for (i=0 ;i <= n/2;i++) {     5             // 做不超過n/2趟選擇排序    6             min = i; max = i ; //分別記錄最大和最小關鍵字記錄位置   7             for (j= i+1; j<= n-1-i; j++) {   8                 if (r[j] > r[max]) {    9                     max = j ; continue ;   10                 }    11                 if (r[j]< r[min]) {   12                     min = j ;   13                 }     14           }    15           //該交換操作還可分情況討論以提高效率  16           tmp = r[i]; r[i] = r[min]; r[min] = tmp;  17           tmp = r[n-1-i]; r[n-1-i] = r[max]; r[max] = tmp;   18         }   19     }  

 

經典排序演算法--簡單選擇排序

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.