Java 幾種排序演算法對比

2021-09-21 03:44:13 字數 3095 閱讀 4946

直接插入排序

插入排序就是:取出乙個數,插入到有序陣列中,首先,取出第乙個元素放入有序陣列中,然後取出第二個,兩個數進行比較,如果它小,則有序數的最後乙個向後移動一格,然後與有序陣列倒數第二個比較,如果小,則繼續向後移動。如果碰到比它小的,則插入在其後面。

演算法思想為:外層迴圈是遍歷陣列的所有值 內層迴圈是,找到小於該值的下標,然後大於該下標的值向後移動。

public static void insertsort(int array) 

int pos=j+1;

int key=array[i];

//把大於key的值都向後移動

for(int k=i;k>pos;k--)

//在pos位置插入key

array[pos]=key;}}

選擇排序選擇排序的主要思想:首先找出整個陣列中最小的乙個數,然後第乙個數和最小的數進行交換,然後,繼續尋找最小的數,然後和陣列第二個數進行交換。

public static void selectsort(int array) 

}swap(array, min, i);}}

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

氣泡排序
//優化版本

public static > void bubblesort(t t) }}

}

public static void bubblesort(int array) }}

}

堆排序堆排序基本思路:首先建立乙個大堆,將最大的元素放在最上面,然後再與最後乙個元素交換,原來有n個數,現在最大的在最後面,去除後,剩餘的n-1個數再進行建立大堆,然後再進行交換,直到個數變為1,這個時候就是完整的排序

static void heapsort(int array) 

//初步調整完畢,取出最頂上的節點,然後與最後乙個結點交換,除去最後乙個節點,然後繼續調整堆,使所有的雙親節點都大於子節點

for (int j = array.length - 1; j > 0; j--)

}static void heapify(int arr, int i, int length)

//比較子節點與父節點的大小

//誰大誰在上

if (tmp < arr[k]) else

}//此時頂上的數為arr[k], k位置的數應該變為tmp

arr[i]=tmp;

}//交換堆頂元素與最後乙個元素

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

歸併排序歸併排序思想:採用分治演算法,將已有序的子串行合併,得到完全有序的序列;即先使每個子串行有序,再使子串行段間有序。

//歸併排序

public static void mergesort(int array)

//進行分組

public static void mergesortinner(int array, int low, int high, int extra)

if (low >= high)

//滿足分組條件 進行分組

int mid = low + (high - low) / 2;

//運用遞迴 一直分組

//分左邊的分組

mergesortinner(array, low, mid, extra);

//分右邊的分組

mergesortinner(array, mid, high, extra);

//此時分組已經分好,這個時候要進行合併,然後排序。

merge(array, low, mid, high, extra);

}//兩個分組進行排序合併

public static void merge(int array, int low, int mid, int high, int extra) else

}//如果i>mid,說明左邊的已經全部都放入extra中,此時直接將右邊有序的插入到後面

while (j < high)

//如果j>high,說明右邊的已經全部都放入extra中,此時直接將左邊有序的插入到後面

while (i < mid)

//最後將extra已經排好的數放入到array中

for (int k = low; k < high; k++)

}

快速排序快速排序主要思想::任取待排序元素序列中 的某元素作為基準值,按照該排序碼將待排序集合分割成兩子串行,左子串行中所有元素均小於基準值,右 子串行中所有元素均大於基準值,然後最左右子串行重複該過程,直到所有元素都排列在相應位置上為止。

public static void quicksort(int array, int low, int high) 

int i = low, j = high, tmp = array[low], t;

while (i < j)

//找到乙個比基準值大的數

while (tmp >= array[i] && i < j)

//找到比基準值大的和比基準值小的數。進行交換

if (i < j)

}//以上操作已經將所有大於和小於基準值的數分好。

//此時再將基準值放進去

array[low] = array[i];

array[i] = tmp;

//遞迴進行左右陣列,進行上述步驟

quicksort(array, low, j - 1);

//遞迴呼叫右半陣列

Java幾種排序演算法

陣列排序 author jrunner 2009 10 26 e main jrunner 126.com class testsort print a tosort1 a tosort2 a tosort3 a tosort4 a print a 方法一 更換值 private static vo...

幾種常見的排序演算法對比

幾種常見的排序演算法對比 排序法 平均時間 最差情形 穩定度額外空間 備註 冒泡o n2 o n2 穩定o 1 n 小時較好 交換 o n2 o n2 不穩定o 1 n 小時較好 選擇 o n2 o n2 不穩定o 1 n 小時較好 插入 o n2 o n2 穩定o 1 大部分已排序時較好 基數 o...

幾種常見的排序演算法對比

排序法 平均時間 最差 情形 穩 定度 額外 空間 備註 冒泡o n 2 o n 2 穩定 o 1 n 小時較好 交換 o n 2 o n 2 不穩定o 1 n 小時較好 選擇 o n 2 o n 2 不穩定o 1 n 小時較好 插入 o n 2 o n 2 穩定 o 1 大部分已排序時較好 基數 ...