java数据结构60:选择排序

简介: 选择排序输出的是对n个元素的原序列的一个重排<a0,a1,a2,...,an-1>;,使得a0<= a1<= a2<= .......<= an-1

60:选择排序

总时间限制:

100ms

 

内存限制:

32767kB

描述

选择排序输出的是对n个元素的原序列的一个重排<a0,a1,a2,...,an-1>;,使得a0<= a1<= a2<= .......<= an-1


选择排序思想

n个元素的直接选择排序可经过n-1趟直接选择排序得到有序结果:

①初始状态:无序区为R[0..n-1],有序区为空。

②第1趟排序

在无序区R[0..n-1]中选出关键字最小的记录R[k],将它与无序区的第1个记录R[0]交换,使R[0..0]和R[1..n-1]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。

……

③第i趟排序

第i趟排序开始时,当前有序区和无序区分别为R[0..i-1]和R[i..n-1]。该趟排序从当前无序区中选出关键字最小的记录 R[k],将它与无序区的第1个记录R[i]交换,使R[0..i]和R[i+1, n-1]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。

输入一个整数序列,请输出选择排序每趟排序的结果。

输入

输入有2行,第一行是一个整数n,表示第2行会有n个整数。

输出

输出对第2行的n个整数每趟选择排序的结果。

样例输入

8

75 23 64 32 54 91 89 17

样例输出

17 23 64 32 54 91 89 75

17 23 64 32 54 91 89 75

17 23 32 64 54 91 89 75

17 23 32 54 64 91 89 75

17 23 32 54 64 91 89 75

17 23 32 54 64 75 89 91

17 23 32 54 64 75 89 91

提示

n个整数,选择排序应该执行 n - 1 趟。

实现代码如下:

import java.util.Scanner;
/**
 * @author baikunlong
 * @date 2020/6/22 22:25
 */
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[] nums=new int[n];
        for (int i = 0; i < n; i++) {
            nums[i]=scanner.nextInt();
        }
        for (int i = 0; i < n-1; i++) {
            int min=nums[i];
            int index=-1;
            for (int j = i+1; j < n; j++) {
                if(min>nums[j]){
                    min=nums[j];
                    index=j;
                }
            }
            if(index!=-1){
                int t=nums[i];
                nums[i]=min;
                nums[index]=t;
            }
            for (int j = 0; j < nums.length-1; j++) {
                System.out.print(nums[j]+" ");
            }
            if(i!=n-2){
                System.out.print(nums[nums.length-1]+"\n");
            }else {
                System.out.print(nums[nums.length-1]+"");
            }
        }
    }
}

目录
相关文章
|
25天前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
62 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
15天前
|
存储 Java
Java中的HashMap和TreeMap,通过具体示例展示了它们在处理复杂数据结构问题时的应用。
【10月更文挑战第19天】本文详细介绍了Java中的HashMap和TreeMap,通过具体示例展示了它们在处理复杂数据结构问题时的应用。HashMap以其高效的插入、查找和删除操作著称,而TreeMap则擅长于保持元素的自然排序或自定义排序,两者各具优势,适用于不同的开发场景。
28 1
|
18天前
|
存储 Java
告别混乱!用Java Map优雅管理你的数据结构
【10月更文挑战第17天】在软件开发中,随着项目复杂度增加,数据结构的组织和管理至关重要。Java中的Map接口提供了一种优雅的解决方案,帮助我们高效、清晰地管理数据。本文通过在线购物平台的案例,展示了Map在商品管理、用户管理和订单管理中的具体应用,有效提升了代码质量和维护性。
61 2
|
18天前
|
存储 Java 开发者
Java Map实战:用HashMap和TreeMap轻松解决复杂数据结构问题!
【10月更文挑战第17天】本文深入探讨了Java中HashMap和TreeMap两种Map类型的特性和应用场景。HashMap基于哈希表实现,支持高效的数据操作且允许键值为null;TreeMap基于红黑树实现,支持自然排序或自定义排序,确保元素有序。文章通过具体示例展示了两者的实战应用,帮助开发者根据实际需求选择合适的数据结构,提高开发效率。
49 2
|
6天前
|
存储 Java 索引
Java中的数据结构:ArrayList和LinkedList的比较
【10月更文挑战第28天】在Java编程世界中,数据结构是构建复杂程序的基石。本文将深入探讨两种常用的数据结构:ArrayList和LinkedList,通过直观的比喻和实例分析,揭示它们各自的优势与局限,帮助你在面对不同的编程挑战时做出明智的选择。
|
14天前
|
存储 算法 Java
Java 中常用的数据结构
【10月更文挑战第20天】这些数据结构在 Java 编程中都有着广泛的应用,掌握它们的特点和用法对于提高编程能力和解决实际问题非常重要。
19 6
|
15天前
|
存储 Java 开发者
Java中的Map接口提供了一种优雅的方式来管理数据结构,使代码更加清晰、高效
【10月更文挑战第19天】在软件开发中,随着项目复杂度的增加,数据结构的组织和管理变得至关重要。Java中的Map接口提供了一种优雅的方式来管理数据结构,使代码更加清晰、高效。本文通过在线购物平台的案例,展示了Map在商品管理、用户管理和订单管理中的具体应用,帮助开发者告别混乱,提升代码质量。
24 1
|
23天前
|
存储 算法 Java
Java常用的数据结构
【10月更文挑战第3天】 在 Java 中,常用的数据结构包括数组、链表、栈、队列、树、图、哈希表和集合。每种数据结构都有其特点和适用场景,如数组适用于快速访问,链表适合频繁插入和删除,栈用于实现后进先出,队列用于先进先出,树和图用于复杂关系的表示和查找,哈希表提供高效的查找性能,集合用于存储不重复的元素。合理选择和组合使用这些数据结构,可以显著提升程序的性能和效率。
|
30天前
|
存储 Java
数据结构第二篇【关于java线性表(顺序表)的基本操作】
数据结构第二篇【关于java线性表(顺序表)的基本操作】
29 6
|
30天前
|
Java 语音技术 容器
java数据结构泛型
java数据结构泛型
26 5