您的位置:首页 > 其它

经典算法(19)教你两分钟学会【选择排序】

2020-03-06 10:55 239 查看

写在前面: 我是 扬帆向海,这个昵称来源于我的名字以及女朋友的名字。我热爱技术、热爱开源、热爱编程。

技术是开源的、知识是共享的


这博客是对自己学习的一点点总结及记录,如果您对 Java、算法 感兴趣,可以关注我的动态,我们一起学习。

用知识改变命运,让我们的家人过上更好的生活

相关文章

经典算法:冒泡排序及其优化

经典算法:图文并茂解析 快速排序

经典算法:图文并茂解析 堆排序

文章目录

一、选择排序介绍

选择排序(Selection sort)是一种简单直观的排序算法。

二、算法思想

第 1 趟

从待排序的数据元素中选出最小(或最大)的一个元素
,存放在序列的起始位置;
然后再
从剩余的未排序元素中寻找到最小(大)元素
,放到已排序的序列的末尾。
以此类推,直到全部待排序的数据元素的个数为零,元素全部有序。

三、实现过程

规律

  • 第 1 趟:
    从n个数据中找出最小的数据和第一个数据交换
  • 第 2 趟:
    从第二个数据开始的n-1个数据中再选出最小的数据与第二个数据交换
  • 以此类推…
  • 第 i 趟,则
    从第 i 个数据开始的 n-i+1 个数据中选出最小的数据与第i个数据交换,直到整个序列有序

四、代码实现

public class SelectSort {
public static void main(String[] args) {
System.out.println("输入要排序的值,输入的每个值用逗号隔开:");
Scanner input = new Scanner(System.in);
String str = input.nextLine();
// 将字符串按照","拆分成字符串数组
String[] strArray = str.split(",");
// 新建数组用来存储拆分出来的每个值
int[] array = new int[strArray.length];
// 给数组循环遍历赋值
for (int i = 0; i < strArray.length; i++) {
array[i] = Integer.parseInt(strArray[i]);
}

System.out.println("排序前的数组:" + Arrays.toString(array));
// 排序
selectSort(array);
System.out.println("排序后的数组:" + Arrays.toString(array));
}

/**
* 选择排序
*
* @param array 待排序的数组
*/
private static void selectSort(int[] array) {

//判断数组为空或为一个元素的情况
if (null == array || array.length <= 1) {
return;
}

for (int i = 0; i < array.length - 1; i++) {
int tempIndex = i; // 当前最小元素的索引
int temp = array[i]; // 临时变量为当前最小元素
// 循环遍历待排序的数组
for (int j = i + 1; j < array.length; j++) {
// 如果发现有比这个最小位置处的元素更小的元素,则将那个更小的元素的下标赋给临时变量
if (temp > array[j]) {
temp = array[j];
tempIndex = j;
}
}
// 如果临时变量发生改变,则说明有比当前外层循环位置更小的元素,需要将这两个元素交换位置
if (tempIndex != i) {
array[tempIndex] = array[i];
array[i] = temp;
}
System.out.println("   第" + (i + 1) + "趟后:" + Arrays.toString(array));
}
}
}

执行结果:

由于水平有限,本博客难免有不足,恳请各位大佬不吝赐教!

  • 点赞 21
  • 收藏
  • 分享
  • 文章举报
扬帆向海 发布了92 篇原创文章 · 获赞 2679 · 访问量 40万+ 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: