基本排序演算法的實現,包括選擇排序,插入排序,氣泡排序,希爾排序,歸併排序,堆排序,快速排序
選擇排序
思想:從第乙個記錄開始,進行一輪比較後,得到最小記錄,然後將其與第乙個記錄交換,對不包括第乙個記錄的剩餘記錄進行比較,直至所有記錄有序
複雜度: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 ...