氣泡排序和引用型別

SieSteven發表於2014-08-27

專案中資料需要排序,自己寫了個冒泡。

寫完後發現了引用型別和值型別的差異。值型別作為引數時,不會改變原來的值,引用型別作為引數時,會改變原來的值。跟C語言中的傳值,傳地址類似。

引用型別:使用者自定義的類,介面,委託,字串,陣列,object,dynamic

官網連結如下:http://msdn.microsoft.com/zh-cn/library/490f96s2.aspx


氣泡排序的程式碼如下:

呼叫方法

 protected void btnSort_Click(object sender, EventArgs e)
        {
            int[] intArray = new int[] { 10, 50, 9, 3, 7, 5, 6, 12, 3, 7, 92 };
            int[] intSorted= SortASC(intArray);
            int[] DESC = SortDESC(intArray);
        }

升序
        private int[] SortASC(int[] intArray)
        {
            int intTemp = 0;
            int[] tempArray = new int[intArray.Length];
            for (int i = 0; i < intArray.Length; i++)
            {
                tempArray[i] = intArray[i];
            }
            //tempArray=   intArray;
            for (int i = 0; i < tempArray.Length; i++)
            {
                for (int j = i; j < tempArray.Length; j++)
                {
                    if (tempArray[i] > tempArray[j])
                    {
                        intTemp = tempArray[i];
                        tempArray[i] = tempArray[j];
                        tempArray[j] = intTemp;
                    }
                }
            }
            return tempArray;
        }

降序
        private int[] SortDESC(int[] intArray)
        {
            int intTemp = 0;
            int[] tempArray = intArray;
            for (int i = 0; i < tempArray.Length; i++)
            {
                for (int j = i; j < tempArray.Length; j++)
                {
                    if (tempArray[i] < tempArray[j])
                    {
                        intTemp = tempArray[i];
                        tempArray[i] = tempArray[j];
                        tempArray[j] = intTemp;
                    }
                }
            }
            return tempArray;
        }


問題:升序執行完畢後,沒有改變原來陣列的順序,降序執行完畢後,原來的陣列也跟著變了。

經對比發現       int[] tempArray = intArray;這條語句是把引數的地址直接傳遞給新宣告的變數。因此,函式的返回值型別可以為void。

相關文章