选择排序算法原理:每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕。也就是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。基于此思想的算法主要有简单选择排序、树型选择排序和duip堆排序只介绍常用的简单选择排序)
简单选择排序的基本思想:给定数组:int[] arr={里面n个数据};第1趟排序,在待排序数据arr[1]~arr[n]中选出最小的数据,将它与arrr[1]交换;第2趟,在待排序数据arr[2]~arr[n]中选出最小的数据,将它与r[2]交换;以此类推,第i趟在待排序数据arr[i]~arr[n]中选出最小的数据,将它与r[i]交换,直到全部排序完成。
代码示例:
public class SelectSort {
public static void main(String[] args) {
int arr[] = {5,2,3,9,4,1,11,21,8,7};
sort(arr);
for (int i : arr) {
System.out.print(i + " ");
}
}
public static void sort(int[] a){
for (int i=0;i<a.length;i++) {
int k = i;
for (int j = k+1; j < a.length; j++) {
if(a[j] < a[k]){
k = j;
}
}
if(i != k){
int num = a[i];
a[i] = a[k];
a[k] = num;
}
}
}
}
选择排序的时间复杂度:简单选择排序的比较次数与序列的初始排序无关。 假设待排序的序列有 N 个元素,则比较次数永远都是N (N - 1) / 2。而移动次数与序列的初始排序有关。当序列正序时,移动次数最少,为 0。当序列反序时,移动次数最多,为3N (N - 1) / 2。
所以,综上,简单排序的时间复杂度为 。