none
Array Sort的問題 RRS feed

  • 問題

  • 想請問如何取得排序後的index

     

    int[ ] D= new int[ ]{3,9,5,2,1};
    Arrays.sort(D);

    排序前D為{3,9,5,2,1}
    排序前D的index為{0,1,2,3,4}

    排序後D為{1,2,3,5,9}
    排序後D的index為{4,3,0,2,1}

    但如果我需要把排序後的index也記錄起來

    並希望能在sort的過程中就取到
    請問要如何做?

     

    大致上有幾個想法

    1. 自己寫一個quick sort

    2. 以排序後的陣列為外圍( i)迴圈,
        未排序的陣最為內圍(j)迴圈,
        在內圍迴圈內比對值相等的時候, 
        再將index(j)取出來。

        (但這是屬於sort後做的動作,不是我要的)

    3.使用c#中的Array.Sort() => 不曉得有沒有


     


     

    2007年11月27日 上午 03:45

解答

  • HI,

     

    您可以考慮使用HashTable來存資料, 每一個資料都包含內容和鍵值, 您可以在鍵值中填入:0,1,2,3,4, 當做Index來用, 以後元素經過排序後, 鍵值還是跟著內容, 不需要另外處理

     

    tihs

     

    2007年11月27日 上午 04:03
  • HI :    給妳參考 ︿︿

     

    程式碼區塊

    private void button1_Click(object sender, EventArgs e)
            {
                int[] D      = new int[] { 3, 9, 5, 2, 1 };
                int[] DIndex = new int[D.Length];

                String S;

                for (int i = 0; i < DIndex.Length; i++)
                    DIndex[i] = i;


             

                Array.Sort(D,DIndex);

                S="排序後索引=";

                foreach (int K in DIndex)
                {
                    S = S + K.ToString()+" ";
                   
                }
                S += ";";

                MessageBox.Show(S);

            }

     

     

     

    2007年11月27日 上午 04:08

所有回覆

  • HI,

     

    您可以考慮使用HashTable來存資料, 每一個資料都包含內容和鍵值, 您可以在鍵值中填入:0,1,2,3,4, 當做Index來用, 以後元素經過排序後, 鍵值還是跟著內容, 不需要另外處理

     

    tihs

     

    2007年11月27日 上午 04:03
  • HI :    給妳參考 ︿︿

     

    程式碼區塊

    private void button1_Click(object sender, EventArgs e)
            {
                int[] D      = new int[] { 3, 9, 5, 2, 1 };
                int[] DIndex = new int[D.Length];

                String S;

                for (int i = 0; i < DIndex.Length; i++)
                    DIndex[i] = i;


             

                Array.Sort(D,DIndex);

                S="排序後索引=";

                foreach (int K in DIndex)
                {
                    S = S + K.ToString()+" ";
                   
                }
                S += ";";

                MessageBox.Show(S);

            }

     

     

     

    2007年11月27日 上午 04:08
  • 謝謝答覆,你們的回覆很受用哦!

    2007年11月27日 上午 06:52