Java語(yǔ)言中進(jìn)行排序時(shí),常用的兩種方式是堆內(nèi)和堆外排序。
堆內(nèi)排序,也稱(chēng)為內(nèi)存排序,是指算法在內(nèi)存中完成排序。這種方法適用于小數(shù)據(jù)量的排序,因?yàn)閷?duì)于大數(shù)據(jù)量的排序,內(nèi)存往往不足以存儲(chǔ)全部的數(shù)據(jù)。堆內(nèi)排序的算法有插入排序、選擇排序、冒泡排序等。
public static void bubbleSort(int[] array) {
for (int i = 0; i< array.length - 1; i++) {
for (int j = 0; j< array.length - 1 - i; j++) {
if (array[j] >array[j + 1]) {
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
}
堆外排序,也稱(chēng)為外部排序,是指將全部數(shù)據(jù)存儲(chǔ)在外部存儲(chǔ)設(shè)備中,比如硬盤(pán),由于硬盤(pán)容量很大,所以可以存儲(chǔ)大數(shù)據(jù)量的排序數(shù)據(jù)。外部排序的算法有歸并排序、快速排序等。
public static void mergeSort(int[] array, int left, int right) {
if (left< right) {
int mid = (left + right) / 2;
mergeSort(array, left, mid);
mergeSort(array, mid + 1, right);
merge(array, left, mid, right);
}
}
private static void merge(int[] array, int left, int mid, int right) {
int[] temp = new int[right - left + 1];
int i = left;
int j = mid + 1;
int k = 0;
while (i<= mid && j<= right) {
if (array[i]<= array[j]) {
temp[k++] = array[i++];
} else {
temp[k++] = array[j++];
}
}
while (i<= mid) {
temp[k++] = array[i++];
}
while (j<= right) {
temp[k++] = array[j++];
}
for (int m = 0; m< temp.length; m++) {
array[left + m] = temp[m];
}
}
總的來(lái)說(shuō),堆內(nèi)排序適用于小數(shù)據(jù)量的排序,而堆外排序則適用于大數(shù)據(jù)量的排序。