Java是一種廣泛使用的計(jì)算機(jī)編程語言,它提供了很多種排序算法,其中快排和堆排序是兩個(gè)最常用的排序算法。
快排是一種基于分治思想的高效排序算法,其核心思想是通過隨機(jī)選取一個(gè)基準(zhǔn)值,將數(shù)組分為兩個(gè)子數(shù)組。其中一個(gè)子數(shù)組中所有元素均小于基準(zhǔn)值,另一個(gè)子數(shù)組中所有元素均大于基準(zhǔn)值。遞歸地對(duì)子數(shù)組進(jìn)行排序,最終達(dá)到整個(gè)數(shù)組有序的目的。以下是Java實(shí)現(xiàn)快排的代碼:
public static void quickSort(int[] arr, int left, int right) { int i, j, temp, pivot; if (left< right) { i = left; j = right; pivot = arr[left]; while (i< j) { while (i< j && arr[j] >= pivot) j--; if (i< j) { arr[i] = arr[j]; i++; } while (i< j && arr[i]< pivot) i++; if (i< j) { arr[j] = arr[i]; j--; } } arr[i] = pivot; quickSort(arr, left, i - 1);//遞歸調(diào)用 quickSort(arr, i + 1, right);//遞歸調(diào)用 } }
堆排序是一種基于二叉樹的排序算法,它通過維護(hù)一個(gè)堆來實(shí)現(xiàn)。堆是一種特殊的樹結(jié)構(gòu),滿足所有父節(jié)點(diǎn)都大于或小于其子節(jié)點(diǎn)的條件。堆排序的基本思想是先將待排序的序列構(gòu)建成一個(gè)大根堆或小根堆,然后將堆頂元素與堆底元素交換位置,最后再對(duì)堆進(jìn)行調(diào)整,使得剩余元素仍然滿足堆的性質(zhì)。以下是Java實(shí)現(xiàn)堆排序的代碼:
public static void heapSort(int[] arr) { int n = arr.length; for (int i = n / 2 - 1; i >= 0; i--) heapify(arr, n, i); for (int i = n - 1; i >= 0; i--) { int temp = arr[0]; arr[0] = arr[i]; arr[i] = temp; heapify(arr, i, 0); } } public static void heapify(int[] arr, int n, int i) { int largest = i; int l = 2 * i + 1; int r = 2 * i + 2; if (l< n && arr[l] >arr[largest]) largest = l; if (r< n && arr[r] >arr[largest]) largest = r; if (largest != i) { int swap = arr[i]; arr[i] = arr[largest]; arr[largest] = swap; heapify(arr, n, largest); } }