zoukankan      html  css  js  c++  java
  • 数组元素的排序,输出排序后的序号 冒泡排序和下标运用

    2020年12月16日 08:40:54   这道题我一个礼拜都没想出来 老师的的讲解让我很明白 我都怀疑自己了...
    我们上问题      -- -- -- -- 代码      - -- -- -- -      和      - - -- - -     思维图  -- - - - - - -            读万卷 题意现~

    题目描述

    题目描述:

    输入一个数组的值,求出各个值从小到大排序后的次序。并且要求相同的数据其序号是相同的

    输入

    输入:

    输入有多组数据。
    每组输入的第一个数为数组的长度n(1<=n<=10000),后面的数为数组中的值,以空格分割。

    输出

    输出:

    各输入的值按从小到大排列的次序(最后一个数字后面没有空格)。

    样例输入

    4
    -3 75 12 -3

    样例输出

    1 3 2 1

    思维图:

    看上面图 有以下代码实现:(认真看注释!)

    import java.util.*;
    
    public class Main {
        public static void main(String[] args)
        {
            Scanner sc = new Scanner(System.in);
            int n = sc.nextInt();
            int [] arr_a = new int[n],arr_b = new int[n]; // 定义两个数组,一个排序,一个不动
            for(int i = 0;i<n;i++) {                //给a和b两个数组赋值
                arr_a[i] = sc.nextInt();
                arr_b[i] = arr_a[i];
            }
    
            Arrays.sort(arr_a); //用类方法直接把a排序好 从小到大 也可以用冒泡法 这里不用
    
            int [] arr_c = new int[n];//定义一个数组c来存储arr_a(已排好序)的位置
            arr_c[0] = 1; // 使 arr_c的第一个元素为 1 ;
            for(int i = 1;i<n;i++)  {       //循环n-1次,目的是判断两值是否相等后取其位置
                if(arr_a[i] == arr_a[i-1]) {    //如果后一个等于前一个 就一直"第一个"的位置
                    arr_c[i] = arr_c[i-1];
                }else{                          //如果不是 那么位置是arr_c的前一个位置+1
                    int t = arr_c[i-1];
                    arr_c[i] = ++t;
                }
            }
    
    
    
            /*我们现在:a是排好序的 b是原始数据 c是a(排好序)的位置 即:a元素的位置和c元素一一对应*/
            /*接下来我们使b和a比较 如果b[i]等于a[i]那么我们就让b[i]等于c[i](排好序的位置)*/
    
            for(int i = 0;i<n;i++) {
                for(int j = 0;j<n;j++) {
                    if(arr_b[i] == arr_a[j]) {      //如果b[i](原始) 等于 a[j](排好)
                        arr_b[i] = arr_c[j];        //那么就把c[j]的位置赋给b[i],数组b是最终答案
                        break;                      //搞好后跳出
                    }
                }
            }
    
            String str = ""; //定义字符串来输出答案 因为最末尾不能有 "空格"
            for(int i = 0;i<arr_b.length;i++)
            {
                str += arr_b[i] + " ";
            }
            System.out.print(str.substring(0,str.length()-1));
        }
    
    }

    完。

    本文来自博客园,作者:咸瑜,转载请注明原文链接:https://www.cnblogs.com/bi-hu/p/14142053.html

  • 相关阅读:
    关于哈希表的一些资料
    ACM题目推荐(刘汝佳书上出现的一些题目)
    搜索引擎技术文章
    计算机体系结构文章摘选
    正则表达式语法
    三维地形显示
    无砝码天平3次称出12个小球中质量异常球问题
    关于char, wchar_t, TCHAR, _T(),L,宏 _T、TEXT,_TEXT(转)
    vcf文件分解
    Oracle 创建自动增加主键的表
  • 原文地址:https://www.cnblogs.com/bi-hu/p/14142053.html
Copyright © 2011-2022 走看看