public static void selectSort(int[] a){ if(a == null){ return; } int n = a.length; int minIndex = 0; //从无序区中选一个最小的数放在有序区的最后,初始时认为整个数组都是无序的,选一个最小的数放到第一位 for(int i=0; i<n; i++){ minIndex = i; for(int j=i+1; j<n; j++){ if(a[j]<a[minIndex]){ minIndex = j; } } //交换位置,把无序区中最小的元素放到有序区的最后 int temp = a[i]; a[i] = a[minIndex]; a[minIndex] = temp; } }
直接选择排序和插入排序类似,都将数据分为有序区和无序区。
二者不同的是,插入排序是将无序区的第一个元素直接插入到有序区中去,初始时默认第一个元素是有序的,一步步缩小无序区范围。
选择排序是先在无序区中选出一个最小的元素,然后放到有序区的后面第一位置上。
同时,选择排序也是一种不稳定的排序,例如,4,3,4,1,2这个序列,第一次交换时会将第一个4和1交换,那么原序列中两个4的相对顺序就被破坏啦。
时间: 2024-10-12 17:35:52