思想:
从所有序列中先找到最小的,然后放到第一个位置。之后再看剩余元素中最小的,放到第二个位置……以此类推,就可以完成整个的排序工作了
c++:
#include <iostream> using namespace std; void SelectionSort( int *a,int size) { for(int i = 0; i < size-1; i++) { int min_num = a[i]; int min_index = i; for(int j = i+1; j < size; j++) { if(a[j] < min_num) { min_num = a[j]; min_index = j; } } if(min_index != i) { a[min_index] = a[i]; a[i] = min_num; } } } int main() { int arr[6] = {22,3,1,44,3,9}; SelectionSort(arr,6); for(int i = 0; i < 6; i++ ) cout << arr[i] << " "; return 0; }
突然发现,java中arraylist很好用。
package test; import java.util.ArrayList; public class test { public static void SelectionSort(ArrayList<Integer> a){ for(int i = 0; i < a.size()-1;i++){ int min_num = a.get(i); int min_index = i; for(int j = i+1; j < a.size();j++){ if(a.get(j) < min_num){ min_num = a.get(j); min_index = j; } } if(min_index != i){ a.set(min_index, a.get(i)); a.set(i, min_num); } } } public static void main(String[]args){ ArrayList<Integer> arr = new ArrayList<Integer>(); for(int i = 0; i < 20; i++){ int num = (int) (Math.random()*100); arr.add(num); } SelectionSort(arr); for(int i = 0; i < arr.size();i++) System.out.print(arr.get(i) + " "); } }
选择排序是一个不稳定的排序算法:
例如:
4,3,4,4,3,1
第一次交换,4的相对位置就变了。
选择排序时间复杂度为O(N^2);