常見的陣列排序方法

2021-10-23 21:20:21 字數 2546 閱讀 1884

private

static

int[

]bubblesort()

;// 測試陣列

if(array == null)

for(

int i =

0; i < array.length; i++)}

}return array;

}

舉例:陣列 int arr=;

第一趟排序: 原始資料:5 2 8 4 9 1

最小資料1,把1放在首位,也就是1和5互換位置,

排序結果:1 2 8 4 9 5

第二趟排序:

第1以外的資料進行比較,2最小,

排序結果:1 2 8 4 9 5

第三趟排序:

除1、2以外的資料進行比較,4最小,8和4交換

排序結果:1 2 4 8 9 5

第四趟排序:

除第1、2、4以外的其他資料進行比較,5最小,8和5交換

排序結果:1 2 4 5 9 8

第五趟排序:

除第1、2、4、5以外的其他資料進行比較,8最小,8和9交換

排序結果:1 2 4 5 8 9

private

static

int[

]selectsort()

;if(array == null)

for(

int i =

0; i < array.length -

1; i++)}

if(min != i)

}return array;

}

private

static

int[

]insertsort()

;if(array == null)

for(

int i =

1; i < array.length; i++)}

}return array;

}

1.假設我們對陣列進行快速排序。

2.首先在這個序列中找乙個數作為基準數,為了方便可以取第乙個數。

3.遍歷陣列,將小於基準數的放置於基準數左邊,大於基準數的放置於基準數右邊。

4.此時得到類似於這種排序的陣列。

5.在初始狀態下7是第乙個位置,現在需要把7挪到中間的某個位置k,也即k位置是兩邊數的分界點。

6.那如何做到把小於和大於基準數7的值分別放置於兩邊呢,我們採用雙指標法,從陣列的兩端分別進行比對。

7.先從最右位置往左開始找直到找到乙個小於基準數的值,記錄下該值的位置(記作 i)。

8.再從最左位置往右找直到找到乙個大於基準數的值,記錄下該值的位置(記作 j)。

9.如果位置i快速排序之所以比較快,是因為相比氣泡排序,每次的交換都是跳躍式的,每次設定乙個基準值,將小於基準值的都交換到左邊,大於基準值的都交換到右邊,這樣不會像冒泡一樣每次都只交換相鄰的兩個數,因此比較和交換的此數都變少了,速度自然更高。當然,也有可能出現最壞的情況,就是仍可能相鄰的兩個數進行交換。

int

array4 =

;int len;

if(array4 == null ||

(len = array4.length)==0

|| len ==1)

int[

] array5 =

quicksort

(array4,

0, len -1)

; system.out.

println

(arrays.

tostring

(array5));

}private

static

int[

]quicksort

(int

array,

int left,

int right)

// base中存放基準數

int base = array[left]

;int i = left, j = right;

while

(i != j)

// 再從左往右邊找,直到找到比base值大的數

while

(array[i]

<= base && i < j)

// 上面的迴圈結束表示找到了位置或者(i>=j)了,交換兩個數在陣列中的位置

if(i < j)

// 將基準數放到中間的位置(基準數歸位)

array[left]

= array[i]

; array[i]

= base;

// 遞迴,繼續向基準的左右兩邊執行和上面同樣的操作

// i的索引處為上面已確定好的基準值的位置,無需再處理

quicksort

(array, left, i -1)

;quicksort

(array, i +

1, right);}

return array;

}

陣列排序的常見方法

乙個陣列有n個數字,由小到大排序 1.氣泡排序 主要思想 從前到後一次比較相鄰兩個數的大小,順序不滿足大小要求就交換兩者之間的位置 然後迴圈陣列長度 1,實現排序 比較次數 n 1 n 2 1 n n 1 2 2.選擇排序 主要思想 首先選擇陣列第乙個數,與第二個數做比較,對大的數進行標記,並與第三...

幾種常見的陣列排序方法

廢話不多說,如下,基本的解釋也有 using system using system.collections.generic using system.linq using system.text namespace suanfa sort ints print ints int ints2 sor...

陣列常見的方法

1.filter 方法建立乙個新陣列,其包含通過所提供函式實現的測試的所有元素。function isbigenough value let arr 50,20,4,9 filter isbigenough alert arr 2.foreach 方法對陣列的每個元素執行一次提供的函式。let ar...