选择排序算法

来源:互联网 发布:js 获取特定属性值 编辑:程序博客网 时间:2024/06/08 18:45

思想

  • 先设置哨兵,将第一个元素作为哨兵
  • 依次和后续的元素进行比较,如果遇到比此哨兵小的元素,则用此元素替换哨兵,继续比较,直至最后一个元素
  • 第一次比较完成之后,将哨兵所在元素和第一个元素进行交换,然后第一个元素即左边的元素就是有序的,接着进行第二次比较,将第二个元素设置为哨兵,依次循环比较

稳定性

  • 选择排序不是稳定排序算法
  • 选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推,直到第n - 1个元素,第n个元素不用选择了,因为只剩下它一个最大的元素了。那么,在一趟选择,如果当前元素比一个元素小,而该小的元素又出现在一个和当前元素相等的元素后面,那么交换后稳定性就被破坏了。比较拗口,举个例子,序列5 8 5 2 9,我们知道第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏了,所以选择排序不是一个稳定的排序算法

代码

//选择排序public class SelectionSort {    //元素    private Integer[] elements;    //索引    private Integer count;    public SelectionSort(Integer max){        this.count = 0;        elements = new Integer[max];    }    //插入数据    public Integer insert(Integer element){        elements[count] = element;        count++;        return element;    }    //显示数据    public void display(){        for (int i = 0; i < count; i++){            System.out.println("array["+i+"]====="+this.elements[i]);        }    }    //排序    public void bubbleSort(){        int out,in,min;        for ( out= 0; out < count-1; out++ ){//外层循环            min = out;            for (in = out+1; in < count; in++){//内层循环                if(elements[in] < elements[min]){                    min = in;                }            }            swap(out,min);        }    }    //交换顺序    private void swap(int one,int two){        int temp = elements[one];        elements[one] = elements[two];        elements[two] = temp;    }    //测试    public static void main(String[] args) {        SelectionSort selectionSort = new SelectionSort(5);        selectionSort.insert(3);        selectionSort.insert(6);        selectionSort.insert(4);        selectionSort.insert(90);        selectionSort.insert(23);        selectionSort.bubbleSort();        selectionSort.display();    }}

结果

array[0]=====3array[1]=====4array[2]=====6array[3]=====23array[4]=====90
原创粉丝点击