所謂數組,就是相同數據類型的元素按一定順序排列的集合,就是把有限個類型相同的變量用一個名字命名,
然后用編號區分他們的變量的集合,這個名字稱為數組名,編號稱為下標。組成數組的各個變量稱為數組的分量,
也稱為數組的元素,有時也稱為下標變量。數組是在程序設計中,為了處理方便,
把具有相同類型的若干變量按有序的形式組織起來的一種形式。
這些按序排列的同類數據元素的集合稱為數組。
下面查了幾本書籍總結的幾個常用的數組排序,打打醬油。也希望對大家有幫助
數組線性查找:又稱順序查找。在一列給定的數值進行搜索,
從一端開始逐步檢查每個元素,直到找到所需元素的過程
代碼如下:
public class Test1 { public static void main(String[] args) { int[] array={1,2,3,6,4,5}; System.out.println("請輸入你要查詢的數"); Scanner ss= new Scanner(System.in); int input= ss.nextInt(); int index=-1;//因為數組下標是從0開始的,如果下標還是-1說明 //數組沒有找到你輸入的值 for (int i = 0; i <array.length; i++) { if (array[i]==input){//判斷數組中有輸入的數據 index=i+1;//i表示數組下標 +1說明是數組的位置 break; } } if (index!=-1){ System.out.println("在數組中找到了你輸入的值,在第"+index+"的位置"); }else { System.out.println("數組中沒有你要找到值"); } } }
二分法查找:又稱折半查找法。將數組中間位置記錄的關鍵字與查找關鍵字比較
如果兩者相等 則查找成功;否則利用中間位置記錄將數組分成前后2個子數組,
如果中間位置記錄的關鍵字大於查找關鍵字,則進一步查找前一個子數組,
否則進一步查找后一個子數組。重復以上過程,直到找到或找不到
代碼如下:
public class Test2 { public static void main(String[] args) { int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 33, 55, 88 }; int first = 0;//起始數 Scanner scanner = new Scanner(System.in); System.out.println("請輸入一個數"); int num = scanner.nextInt(); int last = array.length - 1;//最后一個數 int index = -1; int middle ;//中間數 while (last >= first) { middle = (first + last) / 2; if (array[middle] == num) { index = middle;//如果正好猜到中間數 break; } if (num > array[middle]) { first = middle + 1;//猜的數大於中間數 //把平分數第一個數賦值之前中間數,再次求平均數 } if (num < array[middle]) { last = middle - 1; } } if (index != -1) { System.out.println("您要查的數在" + (index + 1) + "位"); }else{ System.out.println("抱歉沒有找到"); } } }
冒泡排序:比較相鄰的元素 如果第一個比第二個大 就交換它們倆位置下標
對每一個相鄰元素作同樣的工作,從開始第一對到結尾的最后一對。
針對除了最后一個元素以外所有的元素重復以上的步驟。直到沒有任何一對數組需要比較。
代碼如下:
public class Test4 { public static void main(String[] args) { int [] array={1,2,3,9,7,6,4,5}; //N個數比較的輪數為N-1 for (int i = 0; i < array.length - 1; i++) { //每一輪比較的次數為N-1-i; for (int j = 0; j < array.length - 1 - i; j++) { //比較相鄰的兩個數 , 小的靠前 if (array[j]>array[j+1]){ //兩個數做交換位置 通過設置臨時變量 int temp= array[j]; array[j]=array[j+1]; array[j+1]=temp; } } } //把排好順序的數組輸出一下 for (int i = 0; i < array.length; i++) { System.out.println(array[i]); } } }
選擇排序法:首先在未排序序列中找到最小元素,
存放到排序列的起始位置,然后,再從剩余未排序元素中繼續尋找最小元素,然后放到排序序列的末尾。
以此類推 ,直到所有元素均排序完畢
代碼如下:
public class Test5 { public static void main(String[] args) { int[] array={1,3,5,2,6,7,4,9}; int min=0;//保存最小元素值下標 for (int i = 0; i < array.length - 1; i++) { min=i;//查找最小元素在數組的下標 for (int j = i+1; j < array.length; j++) { if (array[min]>array[j]){ min=j;//保存最小數下標 } } //如果第i個最小數的位置不在i上則進行交換 if (i!=min){ int temp=array[i]; array[i]=array[min]; array[min]=temp; } } for (int i = 0; i < array.length; i++) { System.out.println(array[i]); } } }
插入排序:
* 它是通過構建有序序列,對於未排序數據,在已排序序列中從后向前掃描,
* 找到相應位置並插入。從后向前掃描過程中,需要反復把排序元素逐步向后挪移,
* 為最新元素提供插入空間
代碼如下:
public class Test6 {
public static void main(String[] args) {
int[] array= {4,3,6,8,1,7};
for (int i = 0; i < array.length; i++) {
int temp=array[i];
//把下標保存下來
int j=i;
while (j>0&&temp<array[j-1]){
//上面的數覆蓋其下面的數
array[j]=array[j-1];
j--;
}
array[j]=temp;//插入數據
}
for (int i = 0; i <array.length; i++) {
System.out.println(array[i]);
}
}
}