Java排序之冒泡排序、快速排序
冒泡排序在10大排序中是最简单的排序算法之一,它的思想非常容易理解。冒泡排序的基本思想: 通过对待排序序列从前向后,依次比较相邻元素的排序码,若发现逆序则交换,使排序码较大的元素逐渐从前部移向后部。
public static int[] sort1 (int[] arr)
{
int[] newArr = Arrays.copyOf(arr, arr.length);
for (int i = 0; i < newArr.length - 1; i ++) {
for (int j = 0; j < newArr.length - i - 1; j++) {
if (newArr[j] > newArr[j+1]) {
int tmp = newArr[j];
newArr[j] = newArr[j+1];
newArr[j+1] = tmp;
}
}
}
return newArr;
}
快速排序算法是10大排序算法中速度最快的一种。
基本思想:任取待排序序列中的某个元素作为标准( 也称为支点、界点, 一般取第一个元素),通过一次划分,将待排元素分为左右两个子序列,左子序列元素的排序码均小于基准元素的排序码,右子序列的排序码则大于或等于基准元素的排序码,然后分别对两个子序列继续进行划分,直至每一个序列只有一个元素为止。最后得到的序列便是有序序列。
快速排序算法需要使用到递归思想。
public static void quickSort (int[] arr, int left, int right)
{
if (left >= right) {
return;
}
int standard = arr[left]; // 基准值
int tmpn = left; // 划分两个子序列的数组索引值
for (int i = left + 1; i <= right; i ++) {
if (arr[i] < standard) {
swap(arr, i, ++tmpn);
}
}
swap(arr, left, tmpn);
quickSort(arr, left, tmpn-1);
quickSort(arr, tmpn + 1, right);
}
private static void swap (int[] arr, int i, int j)
{
if (i == j) {
return ;
}
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}