选择排序学习

来源:互联网 发布:单片机 精确测量电阻 编辑:程序博客网 时间:2024/06/07 02:02

参考资料来源:

http://zh.wikipedia.org/wiki/%E9%80%89%E6%8B%A9%E6%8E%92%E5%BA%8F

http://baike.baidu.com/view/547263.htm


选择排序

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾(目前已被排序的序列)。以此类推,直到所有元素均排序完毕。


复杂度分析

选择排序的交换操作介于0(n-1)次之间。选择排序的比较操作n(n-1)/2次之间。选择排序的赋值操作介于03(n-1)次之间。

比较次数O(n^2),比较次数与关键字的初始状态无关,总的比较次数N=(n-1)+(n-2)+...+1=n*(n-1)/2。 交换次数O(n),最好情况是,已经有序,交换0次;最坏情况是,逆序,交换n-1次。 交换次数比冒泡排序少多了,由于交换所需CPU时间比比较所需的CPU时间多,n值较小时,选择排序比冒泡排序快。


排序过程

  【示例】:
  初始关键字 [49 38 65 97 76 13 27 49]
  第一趟排序后 13 [38 65 97 76 49 27 49]
  第二趟排序后 13 27 [65 97 76 49 38 49]
  第三趟排序后 13 27 38 [97 76 49 65 49]
  第四趟排序后 13 27 38 49 [76 97 65 49 ]
  第五趟排序后 13 27 38 49 49 [97 65 76]
  第六趟排序后 13 27 38 49 49 65 [97 76]
  第七趟排序后 13 27 38 49 49 65 76 [97]
  最后排序结果 13 27 38 49 49 65 76 97


学习代码:


package com.aoeai.sort;import java.util.Arrays;/** *  * 选择排序 *  * @author wyyl1 *         算法说明来源:http://zh.wikipedia.org/wiki/%E9%80%89%E6%8B%A9%E6%8E%92%E5%BA%8F *  *         选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。 *         首先在未排序序列中找到最小元素,存放到排序序列的起始位置, *         然后,再从剩余未排序元素中继续寻找最小元素, *         然后放到排序序列末尾(目前已被排序的序列)。 *         以此类推,直到所有元素均排序完毕。 *  * @date 2012-9-11 */public class SelectionSort {public static void main(String[] args) {Integer[] arr = {5,9,1,32,55,12,90,2,12};System.out.println("原始数组:" + Arrays.toString(arr));sort(arr);}public static void sort(Integer[] arr){int searchIndex = 0; // 搜索最小值的索引for(int j = 0; j < arr.length; j++){int minIndex = searchIndex; // 本次循环中最小值的索引int minValue = arr[searchIndex]; // 本次循环中的最小值// 找出最小值for(int i = searchIndex; i < arr.length - 1; i++){int nextIndex = i + 1; // 下一个索引if(arr[i] < arr[nextIndex] && arr[i] < minValue){minIndex = i;minValue = arr[i];}else if(arr[nextIndex] < minValue){minIndex = nextIndex;minValue = arr[nextIndex];}}// 交换if(arr[searchIndex] > minValue){arr[minIndex] = arr[searchIndex];arr[searchIndex] = minValue;}searchIndex++;}System.out.println("排序数组:" + Arrays.toString(arr));}}