陣列的排序,反轉,折半查詢,插入

2021-06-02 21:16:42 字數 2223 閱讀 1831

陣列的使用中要注意:

1.下標越界問題;

2.運算元組時候,先要分析,有個整體的思路。

一趟快速排序的演算法是:

1)設定兩個變數i、j,排序開始的時候:i=0,j=n-1;

2)以第乙個陣列元素作為關鍵資料,賦值給key,即 key=a[0];

3)從j開始向前搜尋,即由後開始向前搜尋(j=j-1),找到第乙個小於key的值a[j],並與key交換;

4)從i開始向後搜尋,即由前開始向後搜尋(i=i+1),找到第乙個大於key的a[i],與key交換;

5)重複第3、4、5步,直到 i=j; (3,4步是在程式中沒找到時候j=j-1,i=i+1,直至找到為止。找到並交換的時候i, j指標位置不變。另外當i=j這過程一定正好是i+或j-完成的最後另迴圈結束。)

例如:待排序的陣列a的值分別是:(初始關鍵資料:x=49) 注意關鍵x永遠不變,永遠是和x進行比較,無論在什麼位子,最後的目的就是把x放在中間,小的放前面大的放後面。

a[0] a[1] a[2] a[3] a[4] a[5] a[6]:

49 38 65 97 76 13 27

進行第一次交換後:27 38 65 97 76 13 49

( 按照演算法的第三步從後面開始找)

進行第二次交換後:27 38 49 97 76 13 65

( 按照演算法的第四步從前面開始找》x的值,65>49,兩者交換,此時:i=3 )

進行第三次交換後:27 38 13 97 76 49 65

( 按照演算法的第五步將又一次執行演算法的第三步從後開始找

進行第四次交換後:27 38 13 49 76 97 65

( 按照演算法的第四步從前面開始找大於x的值,97>49,兩者交換,此時:i=4,j=6 )

此時再執行第三步的時候就發現i=j,從而結束一趟快速排序,那麼經過一趟快速排序之後的結果是:27 38 13 49 76 97 65,即所有大於49的數全部在49的後面,所有小於49的數全部在49的前面

畫個圖分析:

**:

public class mysort

; //selectsort(arr);

//show(arr);

//bubblesort(arr);

//show(arr);

//quicksort(arr, 0, arr.length-1);

//show(arr);

//reversearray(arr);

//show(arr);

//quicksort(arr, 0, arr.length-1);//排序,保證陣列有序

//show(arr);

//int index=search(arr, 10);

quicksort(arr, 0, arr.length-1);//排序,保證陣列有序

show(insert(arr, 12)); }

/*選擇排序:

每趟比較選擇乙個元素與其他元素逐個比較,

每趟得到乙個最值排在前面,從左到右增大前面的有序序列*/

public static void selectsort(int arr)

}} }

//把交換兩個元素位置的**抽取出來

public static void swap(int arr,int a,int b)

//內迴圈中每趟將得到乙個最值排到後面

public static void bubblesort(int arr)

}} }

//快速排序效率比較高

public static void quicksort(int arr,int left,int right)

int low=left,high=right;

int pivot=arr[low];//設定樞軸數

while(low=pivot)

swap(arr, low, high);

//從左往右找,依次找到比樞軸數大的數

while(low>1;//除以2

if(arr[mid]>key)

else if(arr[mid]index; i--)

newarr[index]=key;//要插入的數放到正確位置

return newarr;

} //列印陣列

public static void show(int arr)

system.out.println();

}}

04陣列排序和折半查詢

排序方法 基礎的有選擇排序和氣泡排序,高階的有希爾排序 快速排序等。1.選擇排序 選擇排序,以公升序為例 class arraysortdemo selectsort arr printarray arr hello world public static void selectsort int a...

30 陣列的反轉 排序 查詢

public class arraytest 陣列的複製 string arr2 new string arr1.length for int i 0 i arr2.length i 遍歷arr1 system.out.println 遍歷arr1 for int i 0 i arr1.length...

陣列的普通查詢與折半查詢

前提知識 暫未發布 陣列的相關知識 遍歷方式 普通查詢 本質通過陣列的遍歷與if邏輯結構判斷實現 實現步驟 1.遍歷陣列 2.遍歷過程中,使用元素和陣列中的元素進行比較 如果相同,返回元素在陣列中的索引 如果不同,返回負數 public static int search int arr,int k...