基本思想
在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换;然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第2个数)和第n个元素(最后一个数)比较为止。
操作方法
- 第一趟,从n个记录中找出关键码最小的记录与第1个记录交换;
- 第二趟,从第2个记录开始的n-1个记录中再选出关键码最小的记录与第2个记录交换;
- 以此类推…..
- 第i趟,则从第i个记录开始的n-i+1个记录中选出关键码最小的记录与第i 个记录交换,直到整个序列按关键码有序。
算法的实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| package com.zyg.sort;
public class SelectSortAlgorithm { public static void selectSort(int a[], int len) { for (int i = 0; i < len; i++) { int min = i; <!--more--> for (int j = i + 1; j < len; j++) { if (a[min] > a[j]) min = j; } swap(a, i, min); } } public static void swap(int a[], int i, int j) { int temp = a[i]; a[i] = a[j]; a[j] = temp; } public static void printArray(int a[]) { for (int i = 0; i < a.length; i++) { System.out.println(a[i]); } } public static void main(String[] args) { int a[] = { 4, 3, 6, 7, 33, 15, 90, 65, 777, 5550 }; selectSort(a, a.length); printArray(a); } }
|
效率
时间复杂度
平均情况:O(n2)
最好情况:O(n2)
最坏情况:O(n2)
空间复杂度
O(1)
稳定性
不稳定