首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

排序算法-取舍排序

2012-10-09 
排序算法-选择排序选择排序基本思路:从所有元素中选择一个最小元素a[i]放在a[0](即让最小元素a[i]与a[0]交

排序算法-选择排序

选择排序
基本思路:从所有元素中选择一个最小元素a[i]放在a[0](即让最小元素a[i]与a[0]
交换),作为第一轮;第二轮是从a[1]开始到最后的各个元素中选择一个最小元素,放在a[1]中;……依次类推。n个数要进行(n-1)轮。


算法对比:

冒泡排序:比较的次数与冒泡法一样多,但是在每一轮
????? 中只进行一次交换,比冒泡法的交换次数少,相对于冒泡法效率高。

插入排序:相对与插入排序来说,选择排序每次选出的都是全局第i小的,不会调整前i个元素了。

?

在这里补充一下,前面两个的一个基础类:

package com.zenoh.algorithms;public abstract class Sorter<T extends Comparable<T>> {/** * 排序算法函数 *  * @param array *            数组 * @param from *            开始 * @param len *            长度 */public abstract void sort(T[] array, int from, int len);public final void sort(T[] array) {sort(array, 0, array.length);}/** * 交换数组的两个元素 * @param array * @param from * @param to */protected final void swap(T[] array, int from, int to) {T tmp = array[from];array[from] = array[to];array[to] = tmp;}}

?

public class SelectSorter<T extends Comparable<T>> extends Sorter<T> {/** * 选择排序 */@Overridepublic void sort(T[] array, int from, int len) { for(int i=0;i<len;i++)        {            int smallest=i;            int j=i+from;            for(;j<from+len;j++)            {                if(array[j].compareTo(array[smallest])<0)                {                    smallest=j;                }            }            swap(array,i,smallest);                           }}/** * 测试 * @param args */public static void main(String[] args) {Integer array[] = {2,35,5,78,1,90,13,56} ;for (int i = 0 ; i<array.length ; i++){System.out.print(array[i]+",");}System.out.println();Sorter sorter = new SelectSorter<Integer>() ;sorter.sort(array) ;for (int i = 0 ; i<array.length ; i++){System.out.print(array[i]+",");}}}

?

热点排行