标签:方法 实现 temp index src 代码 求和 row length
一.选择排序原理
1.每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置
2.再从剩余未排序元素中继续寻找最小(大)元素,然后放到刚才已排序序列的后面。
3.以此类推,直到全部待排序的数据元素排完。
选择排序是不稳定的排序方法。例如:序列3,3,2,1, 我们知道第一次遍历的时候,选择最后一个元素1和第一个元素3交换,那么原序列中2个3的相对前后顺序就和之前不一样了,所以选择排序不是一个稳定的排序算法。
二.选择排序时间复杂度
第一次循环比较 n - 1次,第二次循环比较 n - 2次,依次类推,最后一个元素不需要比较,因此共进行 n - 1次循环,最后一次循环比较1次。
因此一共比较1 + 2 + 3 + ... +(n - 2)+(n - 1)次,求和得n2/2 - n / 2 ,忽略系数,取最高指数项,该排序的时间复杂度为O(n2)
三.代码实现
//实现选择排序 public class Test02 { public static void main(String[] args) { int[] arr = {1,3,2,5,4,9,6}; selectSort(arr); System.out.println(Arrays.toString(arr)); } public static void selectSort(int[] arr){ if((arr==null)||(arr.length==0)){ try{ throw new MyException("出现了数组为空的异常"); } catch (MyException e) { e.printStackTrace(); } return; } int minIndex = 0;//暂未排序的最小数据的下标 int temp = 0;//将被交换位置的那个元素 for(int i = 0 ; i < arr.length ; i++){ minIndex=i; for(int j = i + 1 ; j < arr.length ; j++){//在暂未排序的区域中找到最小数据并保存其下标 if(arr[j]<arr[minIndex]){//两者中较小的元素的下标赋给minIndex minIndex=j; } } //将最小元素放到本次循环的前端 temp=arr[i]; arr[i]=arr[minIndex]; arr[minIndex]=temp; } } } class MyException extends Exception{ public MyException() { } public MyException(String msg) { super(msg); } }
测试结果如下
标签:方法 实现 temp index src 代码 求和 row length
原文地址:https://www.cnblogs.com/ywb-articles/p/10674407.html