您的位置:首页 > 其它

排序算法---冒泡改良的选择排序

2017-08-07 20:53 225 查看

选择排序的思想

选择排序的思想其实和冒泡排序有点类似,都是在一次排序后把最小的元素放到最前面。但是过程不同,冒泡排序是通过相邻的比较和交换。而选择排序是通过对整体的选择。

在一个长度为N的无序数组中,在第一趟遍历N个数据,找出其中最小的数值与第一个元素交换,第二趟遍历剩下的N-1个数据,找出其中最小的数值与第二个元素交换……第N-1趟遍历剩下的2个数据,找出其中最小的数值与第N-1个元素交换,至此选择排序完成。

如下图以第一遍选择为例:



Java代码实现

public class SelectSort {
public static void main(String[] args) {
System.out.println("请输入要排序的个数n:");
Scanner input = new Scanner(System.in);
int n = input.nextInt();
int array[] = new int
;
System.out.println("请输入要排序的数:");
for (int i = 0; i < n; i++) {
array[i] = input.nextInt();
}
select(array);
System.out.println("排序后的结果为:");
for (int i = 0; i < n; i++) {
System.out.print(array[i] + " ");
}

}

public static void select(int array[]) {
if (array.length <= 1) {//无需排序
return;
}
int min;//最小下标
for (int i = 0; i < array.length - 1; i++) {
min = i;
for (int j = i + 1; j < array.length; j++) {
if (array[j] < array[min]) {
min = j;//找寻剩下数据中的最小值下标
}
}
if (min != i) {//如果不是当前i的位置,才交换
int t = array[i];
array[i] = array[min];
array[min] = t;
}
}
}
}




复杂度

虽然选择排序是对冒泡排序的改良,在找到最小(大)的元素后才交换,但是选择排序的平均时间复杂度依然为O(n^2)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐