陣列的排序

2021-09-26 11:11:16 字數 1588 閱讀 1399

在對陣列進行排序的過程中,我們需要用到數值的傳遞才能保證陣列中的序數--數值對應著改變,而數值的傳遞有兩種方式

•值傳遞(

pass by value

)是指在呼叫函式時將實際引數複製 乙份傳遞到函式中,這樣在函式中如果對 引數 進行修改,將不會影響到實際引數。

public class test 

public static void test(int y)

}

在這段**中,10作為乙個引數被傳給了x,但是10這個引數之後的改變不會影響x

•引用傳遞(

pass by reference

)是指在呼叫函式時將實際引數的位址 直接 傳遞到函式中,那麼在函式中對 引數 所進行的修改,將影響到實際引數。

public class test ;

test(x);

system.out.println(x[0]);//輸出0 }

public static void test(int y)

}

在這段**中,是以將其位址傳給了x,使得x的值與一樣,由於x與指向同乙個位址,之後發生改變,x也會隨之改變。

public class arraysort;//公升序排列

for(int i=0;inextdata)

}for(int data:array)

}}

通過這個迴圈,可以使得當前次序時的相鄰兩數按大小進行交換,但是要往頭部移動的資料進行一次這個迴圈無論如何只能移動一位(因為其在最後才交換),因此為了做到確保最小或者最大的資料在尾部,能夠移動到頭部時,我們需要在外面再巢狀迴圈,而迴圈的次數就是它最多需要移動的次數——即陣列的長度-1

public class arraysort;//公升序排列

for(int looptime=1;looptimenextdata)

}} for(int data:array)

}}

現在這樣就能做到確保完成排序了,但是我們內部迴圈一定會使得靠近頭部的資料移動到其無法再交換的位置為止,所以外部迴圈的次數需要減少,因此**還可以改進

public class arraysort;//公升序排列

for(int looptime=1;looptimenextdata)

}} for(int data:array)

}}

public class arraysort;//公升序排列

for(int i=1;ij;k--)

/**下面**用於將待插入資料插入到「應該」插入的下標位置

*/array[j]=willsortdata;

}//該迴圈體每迴圈完一次就代表著本次待插入資料已經和前面元素是有序的了

for(int data:array)

}}

其實可以理解為將陣列分成了有序區和無序區,有序區由於已經排列好,可以直接比照過去,如果大小符合要求便插入,不符合便放在兩個區域中間,這時候無序區的下乙個元素又拿出來再做插入,隨著迴圈進行,無序區的數就會越來越少,直到全部有序。

陣列的排序

程式的版權和版本宣告部分 檔名稱 array.cpp 作 者 李蒙 完成日期 2012 年12月2 日 版本號 v1.0 輸入描述 無 問題描述 冒泡法排列陣列 include using namespace std void bubble sort int a,int n void output ...

陣列的排序

問題描述 專案3 陣列的排序 1 編寫函式,完成氣泡排序 要求不能改變下面的main函式。程式 include include csdn學院 2016級 目的 讓 見證成長 作為乙個初學的菜鳥,如 檔名稱 myfun171.c 問題描述 刪除陣列元素 完成日期 2017年10月12日 兩個函式bub...

陣列的排序

var arr 1,3,6,8,10,3,4,9 var narr arr.reverse console.log narr 排序sort 方法按照公升序,sort 原理,呼叫每個陣列元素tostring 方法。所以排序字串陣列沒有問題,但是,var arr 1,3,68,8,10,3,4,9 va...