您的位置:首页 > 编程语言 > Java开发

基本排序_选择排序_Java实现

2015-12-18 09:57 267 查看
转载请注明出处:/article/11557474.html

本文出自:【梁敬明的博客】

1.选择排序

  选择排序就是按照指定的先后顺序依次从待排序的元素中选择最大或最小的一个元素,存放到序列的起始位置,直到完成全部排序为止。 


  

  如上图所示,假设一个序列的初始状态为【7】【5】【9】【6】【8】,将序列由小到大进行排序,每次遍历时,将最小的数前置,防止再已排序元素的后面,直到完成排序为止。

  第一次排序,将元素7与之后的其他元素进行比较,将最小的数交换到第一个位置,找到最小的数为5。

  第二次排序,将元素7与之后的其他元素进行比较,将最小的数交换到第二个位置,找到最小的数为6。

  第三次排序,将元素9与之后的其他元素进行比较,将最小的数交换到第三个位置,找到最小的数为7。

  第四次排序,将元素9与之后的其他元素进行比较,将最小的数交换到第四个位置,找到最小的数为8。

  剩余最后一个元素9,位于序列的最后位置。

2.示例代码

  对一个长度为N的序列由小到大进行排序,第i次排序需要找到的最小数为m,将其排在序列的第i位,排序最终完成时需要进行N-1次排序。

  当进行第i次排序时,从第i位的元素开始依次向后比较,最后将最小的元素,排到序列的第i位。

public class SelectSort {

public static void main(String[] args) {
int[] array = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
SelectSort.sort(array);
System.out.println("排序后数组:" + Arrays.toString(array));
}

// 每次从数组中选择最小的数值,放置在已经排序数据的后面,直到全部排序结束为止
public static void sort(int[] a) {
for (int i = 0; i < a.length - 1; i++) {
int index = i;
for (int j = i + 1; j < a.length; j++) {
// 记录最小数的数组索引
if (a[index] > a[j]) {
index = j;
}
}
// 数组值交换
if (i != index) {
a[i] = a[i] + a[index];
a[index] = a[i] - a[index];
a[i] = a[i] - a[index];
}
}
}

}


3.算法分析

时间复杂度:

  选择排序的比较次数与序列的初始状态无关,其比较次数总是n(n−1)2\frac{n(n-1)}{2},交换操作次数位于0到(n−1)0到(n-1)之间,当序列为正序时,元素的交换次数为0,当序列为反序时,元素的交换次数为3(n−1)3(n-1)。

  因此,选择排序的时间复杂度为O(n2)O(n^2)。

算法稳定性:

  对于序列【2】【1】【1】,第一次遍历第一个元素【2】和最后一个元素【1】发生位置交换,原序列中两个【1】的前后位置发生改变,因此选择排序是一种不稳定的排序算法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: