Java实现选择排序

问题描述

利用选择排序把一列数组按从小到大或从大到小排序

(一)、选择排序思想

以从小到大为例:

1、第一轮选择,从第一个数开始,依次比较后面所有的数,不断选出当前最小的数,直到选出这一轮最小的数,放到第一位
2、第二轮选择,从第二个数开始,依次比较后面所有的数,不断选出当前最小的数,直到选出这一轮最小的数,放到第二位
3、如此循环,直到所有数从小到大排列

(二)、问题分析

1. 输入数组

根据用户输入的进行排序的数字数量n,建立一个长度为n的数组

public static void main (String[] args){
  int n,m;
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入你想排序的数量n");
        n=sc.nextInt();

        int [] arrary = new int[n];
        System.out.println("请输入"+n+"个数,并用空格隔开");

        for(int i=0;i<arrary.length;i++){
            arrary[i]=sc.nextInt();
        }

2.输入如何排序

设置两条路径:m=1为从小到大,m=2为从大到小,m=其他 提醒用户重新输入

System.out.println("请问你想:1.从小到大 2.从大到小 排序?");
        m=sc.nextInt();

        while (m!=1 && m!=2 ){
            System.out.println("输入有误请再次输入");
            m = sc.nextInt();
            continue;
        }

3.排序算法

(1)数组长度 arrary.length 也就是用户输入的 n
(2)j 表示第 j +1轮排序,这里面n-1轮排序就已足够
(3)每一轮都有一个当前最小数的索引
(4)初始时索引给第一个位置的数,与之后面的数依次比较,遇到比自己小的数,就把该索引给更小的数
(5)依次比较,直到索引给了这一轮中最小的数
(6)再把该数放在第一个位置,即交换拿到了索引的位置的数与第一个数的位置
(7)第二轮索引给第二个位置的数,找到了除了第一个位置的数以外的最小的数,交换拿到了第二轮索引的位置的数与第二个数的位置
(8)较大数与较小数交换位置的经典算法:若a>b; 则c=a; a=b; b=c;
(9)从大到小排序只需把 array[index]>array[k] 换成 array[index]<array[k] 即可
(10)选择进行何种排序,在 if 语句的判断框里加上此时m应该等于的值
(11)因为要先选择进行何种排序,才能进行排序,所以把 m==1 放在 arrary[k]>arrary[k+1] 前面,且用短板与 && ,这样更易于理解(如果m≠1,则直接进行else if 的语句)
(12)也可以 m==1 & array[index]>array[k] 或 array[index]>array[k] & m==1,但不能 array[index]>array[k] && m==2。

for(int j=0;j<array.length-1;j++){
            int index=j;
            for(int k=j;k<array.length;k++){

                if(m==1 && array[index]>array[k]){
                    index=k;
                }

                if(m==2 && array[index]<array[k]){
                    index=k;
                }

                int a=array[j];
                array[j]=array[index];
                array[index]=a;

            }
        }

4.输出数组

由于输出的是一段数组,所以还需要引用一段 for 语句

System.out.print("选择"+m+"的结果为:");
        for(int j=0;j<arrary.length;j++)
            System.out.print(arrary[j]+" ");

(三)、完整代码

把上述代码整理

import java.util.*;
public class Selection {
    public static void main (String[] args){
        int n,m;
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入你想排序的数量n");
        n=sc.nextInt();

        System.out.println("请问你想:1.从小到大 2.从大到小 排序?");
        m=sc.nextInt();

        while (m!=1 && m!=2 ){
            System.out.println("输入有误请再次输入");
            m = sc.nextInt();
            continue;
        }

        int [] array = new int[n];
        System.out.println("请输入"+n+"个数,并用空格隔开");

        for(int i=0;i<array.length;i++){
            array[i]=sc.nextInt();
        }

        for(int j=0;j<array.length-1;j++){
            int index=j;
            for(int k=j;k<array.length;k++){

                if(m==1 && array[index]>array[k]){
                    index=k;
                }

                if(m==2 && array[index]<array[k]){
                    index=k;
                }

                int a=array[j];
                array[j]=array[index];
                array[index]=a;

            }
        }

        System.out.print("选择"+m+"的结果为:");
        for(int j=0;j<array.length;j++)
            System.out.print(array[j]+" ");

    }

}

(四)、运行结果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 深入Java冒泡排序与选择排序的区别详解

    冒泡排序它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成.代码如下: 复制代码 代码如下: public class nums {     public static void main(String[] args){         int []nums = {5,4,3,2,1};         for(int i = 0; i < nums.length; i++){        

  • java冒泡排序和选择排序示例

    冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后.然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后.至此第一趟结束,将最大的数放到了最后.在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二

  • java 合并排序算法、冒泡排序算法、选择排序算法、插入排序算法、快速排序算法的描述

    算法是在有限步骤内求解某一问题所使用的一组定义明确的规则.通俗点说,就是计算机解题的过程.在这个过程中,无论是形成解题思路还是编写程序,都是在实施某种算法.前者是推理实现的算法,后者是操作实现的算法. 一个算法应该具有以下五个重要的特征: 1.有穷性: 一个算法必须保证执行有限步之后结束: 2.确切性: 算法的每一步骤必须有确切的定义: 3.输入:一个算法有0个或多个输入,以刻画运算对象的初始情况: 4.输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果.没有输出的算法是毫无意义的:

  • Java冒泡排序法和选择排序法的实现

    冒泡排序法和选择排序法 本人学生党一枚.Java学习过程,写这个博客纯属当复习,有什么错误的地方请大家指出来在评论里指点指点我.谢谢 冒泡排序法 概念: 从前向后(或从后向前)依次比较相邻的元素,若发现逆顺序,则交换.小的向前换,大的向后换,像水底的气泡逐渐向上冒,顾名思义冒泡排序法. 通俗一点就是把大的往上挪!向冒泡一样. 是交换式排序法的一种.冒泡排序法效率较低. 冒泡排序法思路 1:外层循环:控制它要走几次. 假设你有5个数,那就要走4次,最后一次不用走,最后那个数已经在它位置了所以就要l

  • Java中的数组排序方式(快速排序、冒泡排序、选择排序)

    1.使用JavaApi文档中的Arrays类中的sort()进行快速排序 复制代码 代码如下: import java.util.Arrays; public class TestOne{ public static void main(String [] args){ int [] array={2,0,1,4,5,8}; Arrays.sort(array);//调用Arrays的静态方法Sort进行排序,升序排列 for(int show:array){ System.out.printl

  • Java对数组实现选择排序算法的实例详解

    一. 算法描述     选择排序:比如在一个长度为N的无序数组中,在第一趟遍历N个数据,找出其中最小的数值与第一个元素交换,第二趟遍历剩下的N-1个数据,找出其中最小的数值与第二个元素交换......第N-1趟遍历剩下的2个数据,找出其中最小的数值与第N-1个元素交换,至此选择排序完成. 以下面5个无序的数据为例: 56 12 80 91 20(文中仅细化了第一趟的选择过程) 第1趟:12 56 80 91 20 第2趟:12 20 80 91 56 第3趟:12 20 56 91 80 第4趟

  • java数组排序示例(冒泡排序、快速排序、希尔排序、选择排序)

    快速排序法主要是运用了Arrays中的一个方法Arrays.sort()实现. 冒泡法是运用遍历数组进行比较,通过不断的比较将最小值或者最大值一个一个的遍历出来. 选择排序法是将数组的第一个数据作为最大或者最小的值,然后通过比较循环,输出有序的数组. 插入排序是选择一个数组中的数据,通过不断的插入比较最后进行排序. 复制代码 代码如下: package com.firewolf.sort; public class MySort { /**  * @param args  */ public s

  • JAVA简单选择排序算法原理及实现

    简单选择排序:(选出最小值,放在第一位,然后第一位向后推移,如此循环)第一位与后面每一个逐个比较,每次都使最小的置顶,第一位向后推进(即刚选定的第一位是最小值,不再参与比较,比较次数减1) 复杂度: 所需进行记录移动的操作次数较少 0--3(n-1) ,无论记录的初始排列如何,所需的关键字间的比较次数相同,均为n(n-1)/2,总的时间复杂度为O(n2):空间复杂度 O(1) 算法改进:每次对比,都是为了将最小的值放到第一位,所以可以一比到底,找出最小值,直接放到第一位,省去无意义的调换移动操作

  • Java使用选择排序法对数组排序实现代码

    编写程序,实现将输入的字符串转换为一维数组,并使用选择排序法对数组进行排序. 思路如下: 点击"生成随机数"按钮,创建Random随机数对象:使用JTextArea的setText()方法清空文本域:创建一个整型一维数组,分配长度为10的空间:初始化数组元素,使用Random类的nextInt()方法生成50以内的随机数,使用JTextArea类的append()方法把数组元素显示在文本域控件中:点击"排序"按钮,使用JTextArea类的setText()方法清空

  • java数据结构排序算法之树形选择排序详解

    本文实例讲述了java数据结构排序算法之树形选择排序.分享给大家供大家参考,具体如下: 这里我们就来说说选择类排序之一的排序:树形选择排序 在简单选择排序中,每次的比较都没有用到上次比较的结果,所以比较操作的时间复杂度是O(N^2),想要降低比较的次数,则需要把比较过程中的大小关系保存下来.树形选择排序是对简单选择排序的改进. 树形选择排序:又称锦标赛排序(Tournament Sort),是一种按照锦标赛的思想进行选择排序的方法.首先对n个记录的关键字进行两两比较,然后在n/2个较小者之间再进

随机推荐