前言
今天学了排序算法,也跟大家分享一下。
1.定义
选择排序一种简单直观的排序算法。
2.算法思路
第一次找最小的与首位i交换,后面的与i++交换,以由小到大排序为例,首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
3.思路演示
假设有有一组数据:27,45,95,23,39,55,67
第一轮:找到最小值23,和第一个位置27交换,得到有序集合{23} 23,45,95,27,39,55,67 第二轮:从无序集合中找到最小值27,和第二个位置45交换,得到有序集合{23,27} 23,27,95,45,39,55,67 第三轮:从无序集合中找到最小值39,和第三个位置95交换,得到有序集合{23,27,39} 23,27,39,45,95,55,67 第四轮:从无序集合中找到最小值45,不用交换,得到有序集合 {23,27,39,45} 23,27,39,45,95,55,67 第五轮:从无序集合中找到最小值55,和第四个位置95交换,得到有序集合 {23,27,39,45,55,95,67} 23,27,39,45,55,95,67 第六轮:从无序集合中找到最小值67,和第五个位置95交换,得到有序集合 {23,27,39,45,55,67,95} 23,27,39,45,55,67,95
4.代码
import java.util.Arrays;
public class SelectionSort {
public static void main(String[] args) {
int [] arr = {27,45,95,23,39,55,67};
SelectionSort(arr);
System.out.println(Arrays.toString(arr));
}
public static void SelectionSort(int[] arr){
//因为只需要遍历到倒数第二个的位置就好了,所以i < arr.length - 1;
for (int i = 0; i < arr.length - 1; i++){
for (int j = i + 1; j < arr.length; j++){
if (arr[i] > arr[j]){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
}
5.算法特性:
算法稳定性:该算法是稳定的 时间复杂度: 1:n-1 2:n-2 3:n-34:n-4 …… n-1:1 比较次数=(n-1+1)(n-1)/2=(n^2-n)/2 时间复杂度=O(n2)
|