选择排序(SelectionSort)
简单选择排序的基本思想
:
给定数组:int[] a={
里面
n
个数据
}
;
第1
趟
排序,在待排序数据a[1]~a[n]
中选出最小的
数据,将它与a[1]
交换
;第2
趟,在待排序
数据a[2]~a[n]
中选出最小的
数据,将它与a[2]
交换
;以此类推,第i
趟在待排序
数据a[i]~a[n]
中选出最小的
数据,将它与a[i]
交换
,直到全部排序完成
。
源代码:
package com.sunMac.eightSort;
public class SelectionSort {
public static void main(String[] args) {
int[] array={3,2,5,8,4,7,6,9};
System.out.println("排序前:");
for (int i : array) {
System.out.print("->"+i);
}
System.out.println('\n'+"排序后:");
sort(array);
for (int i : array) {
System.out.print("->"+i);
}
}
public static void sort(int []array){
for(int i=0;i<array.length-1;i++){
//外层遍历数组
int k=i;
for(int j=k+1;j<array.length;j++){
//选择最小的记录
if(array[j]<array[k]){
k=j;
//记下目前找到的最小值所在的下标
}
}
if(i!=k){
//内层循环结束,找到最小值后进行交换
int temp=array[i];
//交换啊a[i]和a[k]
array[i]=array[k];
array[k]=temp;
}
}
}
}
时间复杂度
:简单选择排序的
比较次数与序列的初始排序无关
。 假设待排序的序列有 N 个元素,则
比较次数永远都是N (N - 1) / 2
。而移动次数与序列的初始排序有关。当序列正序时,移动次数最少,为 0。当序列反序时,移动次数最多,为3N (N - 1) / 2。
所以,综上,简单排序的
时间复杂度为 O(N2)。