java基本排序演算法的實現

2021-07-23 14:59:12 字數 2860 閱讀 4490

基本排序演算法的實現,包括選擇排序,插入排序,氣泡排序,希爾排序,歸併排序,堆排序,快速排序

選擇排序

思想:從第乙個記錄開始,進行一輪比較後,得到最小記錄,然後將其與第乙個記錄交換,對不包括第乙個記錄的剩餘記錄進行比較,直至所有記錄有序

複雜度:o(n^2)

不穩定

public

static

void

selectsort(int arr)

}if (flag != i)

}}

插入排序

思想:按照記錄的大小依次將當前處理的記錄插入到之前的有序序列中,直至最後乙個序列插入到有序序列為止(類似兩個指標)

複雜度:o(n^2)

穩定

public

static

void

insertsort(int arr)

}arr[j] = temp;

}}

氣泡排序

思想:從第乙個記錄開始,依次對相鄰兩個記錄進行比較,若前記錄大於後記錄,交換位置。進行一輪比較和換位後,n個記錄最大的將位於第n位,然後對(n-1)個記錄進行比較只剩下乙個為止.(最大的會一直向後走,所以每比較完一次就減少1個比較個數)

複雜度:o(n^2)

穩定

public

static

void

bubblesort(int arr) }}

}

希爾排序

思想:將序列分為多個子串行,是每個子串行的元素相對較少,然後對每個子串行進行直接插入排序,待每個子串行基本有序後,在對所有元素進行直接插入排序

複雜度:o(n^s) 1

public

static

void

shellsort(int arr) else

}arr[j + h] = temp;}}

}

歸併排序

思想:對於給定的乙個記錄,首先將每兩個相鄰的長度為1的子串行進行合併,得到n/2(向上取整)個長度為2或1的有序子串行,再將其兩兩歸併,反覆執行

複雜度:o(nlogn)

關鍵步驟:

1:劃分半字表

2:合併半子表

穩定

public

static

void

mergesort(int arr, int p, int r)

}private

static

void

merge(int arr, int p, int q, int r)

for (i = 0, k = q + 1; i < n2; i++, k++)

for (k = p, i = 0, j = 0; i < n1 && j < n2; k++) else

}if (i < n1)

}if (j < n2)

}}

堆排序

思想:將陣列a建立為乙個最大堆,然後交換堆的根(最大元素)和最後乙個葉節點x,將x從堆中去掉形成新的堆a1,然後重複以上動作,直到堆中只有乙個節點。

複雜度:o(nlogn)

不穩定

public

static

void

heapsort(int arr)

for (i = n - 1; i >= 0; i--)

}@suppresswarnings("unused")

private

static

void

adjustminheap(int arr, int pos, int len)

if (arr[child] < temp) else

}arr[pos] = temp;

}private

static

void

adjustmaxheap(int arr, int pos, int len)

if (arr[child] > temp) else

}arr[pos] = temp;//最後將目標結點放在最後交換的子節點位置,此時的pos=child

}

快速排序

思想:對於一組記錄,通過一趟排序後,將原序列分為兩部分,其中前一部分的所有記錄均比後一部分的記錄小,然後依次對前後兩部分的記錄進行快排,遞迴該過程,直至所有記錄有序

複雜度:o(n^2)

不穩定

步驟:

1.分解

2.遞迴求解

3.合併

public

static

void

quicksort(int arr)

private

static

void

sort(int arr, int low, int high)

i = low;

j = high;

key = arr[i];

while (i < j)

if (i < j)

while (i < j && arr[i] < key)

if (i < j)

}system.out.println(arr[i]);

arr[i] = key;// 交換後將key賦值到最後交換完成的位置,以此種方式減少交換次數,此時i=j

arraydemo.printarray(arr);

// 以i為中間分界線遞迴

sort(arr, low, i - 1);

sort(arr, i + 1, high);

}

Java實現基本排序演算法

public class sort public static sort getinstance return sort private void move int array,int from,int end 交換陣列中的兩個元素的位置 param array 待交換的陣列 param i 第乙個...

基本排序演算法Java實現

1 氣泡排序 氣泡排序 bubble sort,台灣另外一種譯名為 泡沫排序 是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由...

基本排序演算法java實現

七種基於比較排序演算法記憶口訣 冒擇入希速歸堆 冒失選擇入口的希望是快速回歸馬王堆 氣泡排序 public class bubblesort 從右邊開始,每次迴圈最小值向左沉下去 選擇排序 public class selectionsort tmp arr i arr i arr k arr k ...