请问下面这种排序想法怎么实现啊?谢谢!

secondflying 2005-08-02 04:38:19
数组A中有N个数,想从大到小排序,将排好后的数放到数组B中,同时要记录B数组中的索引和A数组中的索引的关系,放在数组C中,也就是B中从大到小的一系列数在原数组中的位置!
比较笨,想不出来,只好到这里来求救了!谢谢各位大侠了!
...全文
89 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
secondflying 2005-08-04
  • 打赏
  • 举报
回复
谢谢(华仔) 兄
rower203 2005-08-02
  • 打赏
  • 举报
回复
public static void main(String []args)
{
int[] a ={4,6,2,9,5,21,7,23,43,34,11,1};
int[] b = (int[]) a.clone();
int[] c = new int[b.length];

QuickSort qs = new QuickSort();
c = qs.getIndexArray(c);
b = qs.quickSort(b, c, 0, b.length-1);
qs.printResult(a, "a: ");
qs.printResult(b, "b: ");
qs.printResult(c, "c: ");
}

a: 4 6 2 9 5 21 7 23 43 34 11 1
b: 1 2 4 5 6 7 9 11 21 23 34 43
c: 11 2 0 4 1 6 3 10 5 7 9 8
rower203 2005-08-02
  • 打赏
  • 举报
回复
public class QuickSort {
public int[] quickSort(int[] data, int[] c, int leftP,int rightP)
{
int i = leftP;
int j = rightP;

if(i < j){
do {
// printResult(data, "now: ");
while(data[i] < data[leftP] && i < j){
i++;
}

while(data[j] > data[leftP] && j > i){
j--;
}

if(i < j){
exchangeData(data, c, i, j);
}

if (i == j) {
if (data[j] > data[leftP]){
j--;
}
exchangeData(data,c , j, leftP);
}
} while(i < j);

if (j > ++leftP){
quickSort(data, c, leftP, --j);
}
if (j < rightP - 1){
quickSort(data, c, ++j, rightP);
}
}
return data;
}
private int[] getIndexArray(int[] c){
for(int i = 0; i < c.length; i++){
c[i] = i;
}
return c;
}

private void exchangeData(int[] data, int[] c, int a, int b){
int tmp = data[a];
data[a] = data[b];
data[b] = tmp;

tmp = c[a];
c[a] = c[b];
c[b] = tmp;
}

public void printResult(int[] data, String msg){
System.out.print(msg);
for(int i = 0; i < data.length; i++)
{
System.out.print(" " + data[i] + " ");
}
System.out.println("");
}

public static void main(String []args)
{
int[] data={4,6,2,9,5,21,7,23,43,34,11,1};
int[] b = (int[]) data.clone();
int[] c = new int[b.length];

QuickSort qs = new QuickSort();
c = qs.getIndexArray(c);
qs.printResult(data, "Before Quick Sorting: ");
data = qs.quickSort(data, c, 0, data.length-1);
qs.printResult(data, "After Quick Sorting : ");
qs.printResult(b, "b: ");
qs.printResult(c, "c: ");
}
}

是从小到大的顺序排的,要改一下.

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧