读书人

【算法】直接抉择排序

发布时间: 2012-08-29 08:40:14 作者: rapoo

【算法】直接选择排序
直接选择排序的思路很简答,需要经过n-1趟比较。
优点:算法简答,容易实现。
缺点:每趟只能确定一个元素,n个数组需要进行n-1趟比较。

package com.syc.crazejava.chapter12;public class DataWrap implements Comparable<DataWrap> {int data;String flag;public DataWrap(int data,String flag){this.data = data;this.flag = flag;}public String toString(){return data + flag;}public int compareTo(DataWrap dw) {return this.data > dw.data ? 1 : (this.data == dw.data ? 0 : -1);}}


package com.syc.crazejava.chapter12;public class SelectSort {public static void selectSort(DataWrap[] data){System.out.println("开始排序");int arrayLength = data.length;for(int i=0;i<arrayLength-1;i++){//int minIndex = i;for(int j=i+1;j<arrayLength;j++){if(data[i].compareTo(data[j])>0){DataWrap tmp = data[i];data[i] = data[j];data[j] = tmp;}}}System.out.println(java.util.Arrays.toString(data));}public static void main(String[] args){DataWrap[] data = {new DataWrap(21,""),new DataWrap(30,""),new DataWrap(49,""),new DataWrap(30,""),new DataWrap(16,""),new DataWrap(9,"")};System.out.println("排序之前:\n" + java.util.Arrays.toString(data));selectSort(data);System.out.println("排序之後:\n" + java.util.Arrays.toString(data));}}


从上面直接选择排序算法可以看出,直接选择排序算法的关键就是n-1趟比较,每趟比较的目的就是选择出本趟比较中最小的数据,并将该数据放在本趟比较的第1位。从这里的描述不难发现,其实直接选择排序的每趟比较最多只需交换一次就够:只要找到本趟比较中最小的数据,然后拿它和本趟比较中第1位的数据交换。
package com.syc.crazejava.chapter12;public class SelectSort2 {public static void selectSort(DataWrap[] data){System.out.println("开始排序");int arrayLength = data.length;for(int i=0;i<arrayLength -1;i++){int minIndex = i;for(int j=i+1;j<arrayLength;j++){if(data[minIndex].compareTo(data[j])>0){minIndex = j;}}if(minIndex !=i){DataWrap tmp = data[i];data[i] = data[minIndex];data[minIndex] = tmp;}System.out.println(java.util.Arrays.toString(data));}}public static void main(String[] args){DataWrap[] data = {new DataWrap(21,""),new DataWrap(30,""),new DataWrap(49,""),new DataWrap(30,""),new DataWrap(26,""),new DataWrap(9,"")};System.out.println("排序之前:\n" + java.util.Arrays.toString(data));selectSort(data);System.out.println("排序之后:\n" + java.util.Arrays.toString(data));}}

读书人网 >编程

热点推荐