选择排序核心思想是通过每一次遍历选择最小元素:for: i from 0~n-1 { for j from i+1~n-1 选出最小元素a[min] 将选出的最小元素a[min]与a[i]交换位置} 1 package 排序; 2 3 impo ...
选择排序核心思想是通过每一次遍历选择最小元素:
for: i from 0~n-1 {
for j from i+1~n-1
选出最小元素a[min]
将选出的最小元素a[min]与a[i]交换位置
}
1 package 排序; 2 3 import java.util.Arrays; 4 import edu.princeton.cs.algs4.StdOut; 5 /** 6 * 特点: 7 * 1.运行时间与输入无关。为了找出最小的元素而扫描一遍数组,并不能为下一遍扫描提供什么信息 8 * 一个已经有序的数组或是主键全部相等的数组或元素随机排列的数组所用的排序时间一样长 9 * 2.数据移动最少。每次交换都会改变两个数组元素的值,交换次数与数组大小线性相关10 * @author evasean www.cnblogs.com/evasean/11 *12 */13 @SuppressWarnings("rawtypes")14 public class Selection选择排序 {15 public static void sort(Comparable[] a){16 int n = a.length;17 for(int i=0; i<n; i++){18 int min = i;19 for(int j=i+1; j<n; j++){20 if(less(a[j],a[min])) min = j;21 }22 exch(a,i,min);23 }24 }25 @SuppressWarnings("unchecked")26 private static boolean less(Comparable v, Comparable w){27 return v.compareTo(w) < 0;28 }29 private static void exch(Comparable[] a, int i, int j){30 Comparable t = a[i];31 a[i] = a[j];32 a[j] = t;33 }34 private static void show(Comparable[] a){35 for(int i=0; i<a.length; i++) StdOut.print(a[i] + " ");36 StdOut.println();37 }38 public static boolean isSorted(Comparable[] a){39 for(int i = 1; i < a.length; i++){40 if(less(a[i],a[i-1])) return false;41 }42 return true;43 }44 public static void main(String[] args){45 String[] a = {"M","E","R","G","E","S","O","R","T","E","X","A","M","P","L","E"};46 StdOut.println(Arrays.toString(a));47 sort(a);48 assert isSorted(a);49 show(a);50 }51 }
原标题:选择排序(java)
关键词:JAVA
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。