1.1. 交换类排序
1.1.1. 基本思想
交换类排序主要是通过两两比较待排元素的关键字,若发现与排序要求相逆,则“交换”之。
1.1.2. 冒泡排序
void bubble(int[] a) {
for (int i = 0; i < a.length; i++) {// 先遍历数组
for (int j = 1; j < a.length - i; j++) {// 遍历未排好序的len-i个元素
if (a[j - 1] > a[j]) {// 前后比较
int tmp = a[j - 1];
a[j - 1] = a[j];
a[j] = tmp;
}
}
}
}
1.1.3. 快速排序
思路:划分步骤:通过枢轴元素 x 将序列一分为二, 且左子序列的元素均小于 x,右子序列的元素均大于 x;治理步骤:递归的对左、右子序列排序;
void quick(int[] a, int low, int high) {
if (low < high) {
int part = partition(a,low, high);
quick(a,low, part - 1);
quick(a,part + 1, high);
}
}
int partition(int[] a, int low, int high) {
int tar = a[low];
while (low < high) {// 循环该段数据
while (low < high&& tar < a[high])// 先从高端开始查找
high--;
a[low] = a[high];// 交换数据
while (low < high&& tar > a[low])// 再从低端开始查找
low++;
a[high] = a[low];// 交换数据
}
a[low] = tar;// 重新设置枢轴
return low;// 返回枢轴位置
}