Java 如何以排序形式存储int数组的原始索引?
我想先存储数组元素的原始索引号,然后再按升序排序 假设数组中的元素是 x[]={20,40,70,80,50,30} 我希望另一个数组返回排序后的索引号,如 排序[]={0,5,1,4,2,3} 我试了很多次。但我不知道如何得到索引号。每次交换后索引号都会更改 注:Java 如何以排序形式存储int数组的原始索引?,java,arrays,sorting,Java,Arrays,Sorting,我想先存储数组元素的原始索引号,然后再按升序排序 假设数组中的元素是 x[]={20,40,70,80,50,30} 我希望另一个数组返回排序后的索引号,如 排序[]={0,5,1,4,2,3} 我试了很多次。但我不知道如何得到索引号。每次交换后索引号都会更改 注: 我不能用比较器、映射、数组、排序之类的东西。我有 仅使用循环 我已经搜索了所有的网站。我找不到任何具体的答案。 因为他们都使用比较器映射或者其他我没有的东西 目前允许使用 public static int[] sort(int[
- 我不能用比较器、映射、数组、排序之类的东西。我有 仅使用循环李>
- 我已经搜索了所有的网站。我找不到任何具体的答案。
因为他们都使用比较器映射或者其他我没有的东西
目前允许使用
public static int[] sort(int[] numbers) { int[] sorted = new int[numbers.length]; int temp; int[] index= new int[numbers.length]; for (int i = 0; i < numbers.length; i++) { for (int j = i+1; j < numbers.length; j++) { if (numbers[i] > numbers[j]) { temp = numbers[i]; numbers[i] = numbers[j]; numbers[j] = temp; index[i]= j; } } } return index; }
公共静态int[]排序(int[]数字){ int[]排序=新int[numbers.length]; 内部温度; int[]索引=新的int[numbers.length]; for(int i=0;i
数字[j]){ 温度=数字[i]; 数字[i]=数字[j]; 数字[j]=温度; 指数[i]=j; } } } 收益指数; } - 在地图上标出位置
- 分类
- 在排序之前查找索引的映射 PS:由于重复,复杂性会出现。你需要处理 在另一张地图的帮助下 请参阅此处的工作代码
- 我想这就是你想要的:
import java.util.ArrayList;
导入java.util.array;
导入java.util.Collections;
导入java.util.HashMap;
导入java.util.List;
导入java.util.Map;
导入javax.print.attribute.HashAttributeSet;
公共类定位器{
公共静态void main(字符串[]args){
整数[]a={3,2,3,0,1};
Map Map=newhashmap();
for(int i=0;i”+地图);
//分类
列表l=新的ArrayList(Arrays.asList(a));
集合。排序(l);
System.out.println(“排序列表-->”+l);
//获取并打印索引
列表位置列表=新的ArrayList();
Map duplicateTrackerMap=新HashMap();
for(整数键:l){
int pos=0;
if(duplicateTrackerMap.get(key)!=null){
位置=1+重复TrackerMap.get(键);
}
重复跟踪器映射放置(键,位置);
positionList.add(map.get(key.get(pos));
}
System.out.println(“排序索引-->”+位置列表);
}
}
我可以将原始数组存储在另一个数组中,然后使用循环比较排序后的数组并存储索引
谢谢@RubioRic@RCInd.intx[]={20,40,70,80,50,30};
int x[] = { 20, 40, 70, 80, 50, 30 };
int[] array = new int[x.length];
for (int i = 0; i < x.length; i++) {
array[i] = i;
}
for (int i = (x.length - 1); i >= 0; i--) {
for (int j = 1; j <= i; j++) {
int oneMi = j - 1;
if (x[oneMi] > x[j]) {
int temp = x[oneMi];
x[oneMi] = x[j];
x[j] = temp;
int swi = array[oneMi];
array[oneMi] = array[j];
array[j] = swi;
}
}
}
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
int[]数组=新的int[x.length];
对于(int i=0;i=0;i--){
对于(int j=1;j x[j]){
int temp=x[oneMi];
x[oneMi]=x[j];
x[j]=温度;
int swi=数组[oneMi];
数组[oneMi]=数组[j];
数组[j]=swi;
}
}
}
for(int i=0;i
可能的重复在排序之前存储索引,然后在排序之后构建SortedIndex数组怎么样?数组可能的重复可以有重复吗?制作一个索引数组{0,1,2,3,4,5}
。按照您已经排序的方式对其排序,而不是比较索引[i]
和索引[j]
比较数字[i]
和数字[j]
。正如我提到的,我不允许使用map!:(创建阵列的副本,并继续使用mapgreat执行此处所做的操作。您是否可以向上投票它的ans对您有帮助。
int x[] = { 20, 40, 70, 80, 50, 30 };
int[] array = new int[x.length];
for (int i = 0; i < x.length; i++) {
array[i] = i;
}
for (int i = (x.length - 1); i >= 0; i--) {
for (int j = 1; j <= i; j++) {
int oneMi = j - 1;
if (x[oneMi] > x[j]) {
int temp = x[oneMi];
x[oneMi] = x[j];
x[j] = temp;
int swi = array[oneMi];
array[oneMi] = array[j];
array[j] = swi;
}
}
}
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}