数组元素的排序,输出排序后的序号 冒泡排序和下标运用

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

原文地址:https://www.cnblogs.com/bi-hu/p/14142053.html