在這一篇中我們來講一下關於陣列的排序和查詢的方法。
說到陣列的排序,就不得不說冒泡這種經典的方法。
氣泡排序的基本思想是比較兩個相鄰元素的值,如果滿足條件就交換元素的值(如果是公升序,就將較大的值放在索引大的引用內,較小的值放在索引小的引用內;降序的話反之),這樣一次迴圈後最大或最小的值就會轉移到陣列的最後的位置,經過多次迴圈後陣列就會按要求排好。
具體演算法如下(以公升序為例):
public
static
voidswap(intarray)
booleana =false;
for(inti = 0 ; i length-1;i++)
for(intj= 0 ;jlength - i-1;j++)
if(array[j]>array[j+1])
intt= array[j];
array[j]= array[j+1];
array[j+1]= t;
a =true;
if(!a)
return;
在這個方法中我們一共用了兩層迴圈,內層迴圈是用來使最大的乙個數移到陣列的最後的位置,第二次把大二大的數移到陣列倒數第二的位置,第一次迴圈是用來決定第二層迴圈一共需要迴圈多少次,外層迴圈每迴圈一次,內層迴圈就會少個需要比較的元素,這個元素就是我們上一次內層迴圈放到後面的陣列元素值。
在這個方法中我還定義了乙個布林型別的變數,主要是用來提高程式的效率,如果某次內層迴圈一次交換也沒有,說明當前陣列的順序已經滿足要求了,沒有必要進行後面的迴圈了,跳出即可。
氣泡排序我們就將這麼多,我們來介紹另一種排序方式。
這種排序是將每乙個元素都與第乙個元素進行比較,只要比第乙個元素小就交換,最後就會將最小的元素放到第乙個位置。在將後面的元素與第二個元素進行比較交換,同理第二小的元素就會放到第二個位置。以此類推,將陣列元素順序排好。具體演算法如下(以公升序為例):
public
static
voidswapone(intarray)
for(inti= 0 ; i length-1;i++)
for(intj = i+1 ;jlength;j++)
if(array[i]>array[j])
intt = array[j];
array[j] = array[i];
array[i] = t;
在這種方法中也是用到了兩層迴圈,內層迴圈是將要比較的元素與後面的元素依次進行比較,不符合條件就交換,實現最小的或最大的放到最前面。外層迴圈的次數是和陣列元素的個數減一一樣,因為有幾個元素就需要把幾個元素減一放到前面。這個描述起來可能不太好理解,大家可以根據程式來理解一下。
public
static
voidswaptwo(intarray)
intk ;
for(inti = 0;ilength;i++)
k =0;
for(intj= 0; jlength-i;j++)
if(array[j]>array[k])
k =j;
intt= array[array.length - i-1];
array[array.length - i-1] = array[k];
array[k]= t;
這個方法的思路還是比較清晰的,需要注意的是用來標記的變數需要在每次外迴圈開始的時候清零,別的我就不多說了,下面來說說查詢。
最簡單的查詢乙個陣列中是否有某個元素的方法就是乙個乙個元素的與目標值進行比較,實現方法非常的簡單,而且會大量浪費程式執行的時間,所以我們並不推薦使用。下面我來講一下我們最常用的查詢方法:二分法。
要想使用二分法是有乙個前提條件的,就是陣列必須是有序的。這與他的實現思路有關,他是這樣實現的,先講陣列的最中間的元素的值與目標值進行比較,相等返回索引,大於目標值就將前半段的中間元素的值與目標元素進行比較,大、小於目標值就將後半段的中間元素的值與目標元素進行比較。以此類推,如果直到最後都沒有,則就是沒有找到目標值。具體演算法如下:
public
static
intcompare(intarray,inti)
intlow = 0;
inthigh = array.length;
intj = (low+high)/2;
while(low<=high)
if(array[j]== i)
returnj;
else
if(array[j]>i)
high = j-1;
j = (high+low)/2;
else
low = j+1;
j = (high + low)/2;
return-1;
在這個方法中變數low表示是還未進行比較的部分的最小的索引值,同理high表示最大的索引值,每一次迴圈都會改變low或high的值來進行下一次比較,直到找到該元素,或low>high。這個方法還是比較好理解的,我就說這麼多吧。
初學者學Java 三
任何程式語言只要有三種流程控制結構就可以描述任何問題了,這三種流程控制結構分別是 順序結構,選擇結構和迴圈結構。順序結構就是按照邏輯結構的順序一句句往下寫,這裡就不做過多的介紹了。主要說說選擇結構和迴圈結構。1.選擇結構的第一種形式 if 布林表示式 如果執行語句只有一條,可以省略,但最好寫上,增加...
初學者談初學者學html
這是乙個段落。解釋一下就是 html 與 html 之間的文字是描述網頁。head 與 head 之間的文字是文件的元資料。title 與 之間的文字是文件的標題。body 與 body 之間的文字是可見的頁面內容,是文章的主體部分。h1 與 h1 之間的文字被顯示為乙個大標題。p 與 p 之間的文...
初學者mysql MySQL初學者使用指南
有很多朋友雖然安裝好了mysql但卻不知如何使用它。在這篇文章中我們就從連線mysql 修改密碼 增加使用者等方面來學習一些mysql的常用命令。一 連線mysql。1 例1 連線到本機上的mysql。首先在開啟dos視窗,然後進入目錄 mysqlbin,再鍵入命令mysql uroot p,回車後...