排序演算法(java)

2021-08-27 21:28:11 字數 2354 閱讀 6623

1. 氣泡排序

對序號為0~n-1的元素進行比較:將輸入的前乙個元素和後乙個元素做比較,如果前乙個大於後乙個,就交換這兩個元素,這樣經過一輪迴圈後,就會將最大的元素換到最後乙個位置,因此下一次迴圈只需要對0~n-2的元素進行比較,以此類推,每一次處理好乙個數,因此時間複雜度為o(n*n)。其**如下:

public

static

void

bubblesort(int arr)

for (int i = arr.length - 1; i > 0; i--) }}

}public

static

void

swap(int arr, int i, int j)

上面的演算法即使在最好的情況下,時間複雜度也為o(n*n),其實在在排序的過程中,如果沒有交換的操作那麼就意味著排序完成了,因此可以新增乙個變數判斷是否有無排序操作,這樣可以改進演算法,在最好情況下時間複雜度為o(n),**如下:

public

static

void

bubblesort(int arr)

for (int i = arr.length - 1&&flag; i > 0; i--)

}}

氣泡排序的優勢是:可以檢測輸入序列是否已經是有序的。

2. 選擇排序

首先對序號為0~n-1進行處理:令n-1為序列中的最大值max,然後進行遍歷,如果有max的,就用當前位置的值和max交換,這樣經過一輪迴圈後,最大值就會被找到,第二次迴圈只需要處理0~n-2的數,一次類推,因此,選擇排序也是每次處理好乙個數,時間複雜度為o(n*n).**如下:

public

static

void

selectsort(int arr)

for (int i = arr.length - 1; i > 0; i--) }}

}

選擇排序的優點是:容易實現,原地排序(不需要額外的儲存空間)

3. 插入排序

插入排序重複如下過程:每次從輸入的資料中移除乙個元素,並將其插入已經排序序列的正確位置,直到所有輸入的元素都插入有序序列中。經過k次迭代後,前k+1個元素已經排好序。

public

static

void

insertsort(int arr)

arr[preindex+1]=cur;

}}

插入排序的效率與資料狀況有很大關係,如果資料是相對有序的可以使用插入排序。

4. 歸併排序

歸併排序是分治排序的乙個例子,其演算法的思想是將左右兩邊排好序,然後再進行將兩個序列排成乙個序列。合併時是新建乙個陣列,然後將左右兩邊的序列複製到這個陣列中,有兩個指標p1,p2分別指向這兩個子串行,如果arr[p1] < arr[p2],那麼就arr[p1] 填入這個新陣列,並且經p1指向下乙個數,如果arr[p1] >arr[p2],那麼就arr[p2] 填入這個新陣列,並且經p2指向下乙個數,直到遍歷完某個子串行,然後將另乙個子串行剩餘的部分複製到新陣列中。對左右兩邊的序列進行排序時,將其視作子問題進行遞迴。

遞迴演算法的時間複雜度的計算:

t(n)=at(n/b)+o(n^d),其中n/b是指子過程的樣本量,o(n^d)為除去呼叫子過程之外剩下的過程的時間複雜度。若遞迴過程滿足這個表示式,則時間複雜度為:

1) log(b,a) > d ,複雜度為o(n^log(b,a))

2) log(b,a) = d , 複雜度為o(n^d * logn)

3) log(b,a) < d , 複雜度為o(n^d)

public static void mergesort(int arr, int

left, int

right)

intmid = left + ((right - left) >> 1);

mergesort(arr, left, mid);

mergesort(arr, mid + 1, right);

merge(arr, left, mid, right);

}public static void merge(int arr, int

left, int

mid, int

right)

while (p1 <= mid)

while (p2 <= right)

for (int j = 0; j < help.length; j++)

}

java排序演算法

1.定義 通過比較來確定輸入序列1,a 2,a n 的元素間相對次序的排序演算法稱為比較排序演算法。2.演算法解釋 1 選擇排序 選擇排序的基本思想是對待排序的記錄序列進行n 1遍的處理,第i遍處理是將l i.n 中最小者與l i 交換位置。這樣,經過i遍處理之後,前i個記錄的位置已經是正確的了。2...

Java排序演算法

回顧一下排序演算法 稍微地設計一下基礎類 插入排序 插入排序 insertion sort 的基本思想是 每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子檔案中的適當位置,直到全部記錄插入完成為止。氣泡排序 氣泡排序 bubblesort 的基本概念是 依次比較相鄰的兩個數,將小數放在...

java 排序演算法

氣泡排序 public void bubblesort int array 選擇排序 選擇排序 public void selectsort int a else 判斷 j 1 或者 就是第乙個小於等於temp資料的位置 datas j 1 temp 快速排序 快速排序 param datas pu...