返回一個數組升序排列后的位置信息--C#程序舉例
返回某一個數組升序排序后的位置 比如:{8,10,9,11}排序后應該是{8,9,10,11},但是需要返回{1,3,2,4} 大概記憶里是這么個意思很明顯這是一個算法題
同樣這是一個面試題做倒是做出來了,但是效率太低了,我都看不上自己做的,感謝面試官給出的提示:這為什么要排序呢?
是的,這根本不需要排序,只需要找出比 對比的元素小的元素個數即可(有了這個思路)可以寫程序了
程序方法如下
1 /// <summary> 2 /// 返回一個數組升序后的位置信息 3 /// </summary> 4 /// <param name="array"></param> 5 /// <returns></returns> 6 private static int[] getAscendingIndex(int[] array) 7 { 8 int[] indexArray = new int[array.Length]; 9 for (int i = 0; i < array.Length; i++) 10 { 11 int index = 0; 12 for (int j = 0; j < array.Length; j++) 13 { 14 if (array[j]<= array[i]) 15 { 16 index++; 17 } 18 } 19 indexArray[i] = index; 20 } 21 return indexArray; 22 }
測試程序如下:
1 static void Main(string[] args) 2 { 3 int[] ArrayTest = new int[4]{8,10,9,11}; 4 int[] resultArray = getAscendingIndex(ArrayTest); 5 for (int i = 0; i < resultArray.Length; i++) 6 { 7 Console.WriteLine(resultArray[i]); 8 } 9 10 Console.Read(); 11 }
輸出結果:
源程序有需要的可以下載
源代碼工程文件下載
各位大俠,如果有更好的方法算法復雜度更低,麻煩給出,感激!歡迎留言