排序算法
其中的代码如果有问题或者有更好的解法,望各位不吝赐教!
冒泡排序
原理:以一个整数数组为例,排序核心是每次比较相邻两个元素的大小,这样一次循环可以将一个最大或最小的元素放到数组头或数组尾,直到没有元素被移动算法结束
步骤(按从小到大排序):
- 遍历数组,比较相邻两个元素,如果
prev>next,那么交换两个元素 - 遍历完之后判断是否有元素被移动
- 被移动-->返回步骤1
- 无移动-->步骤3
- 退出算法
代码实现:
public class BubbleSort {
public static void main(String[] args) {
final long seed = -26443L;
final int arrLength = 100;
final int[] unSortArray = new int[arrLength];
Random random = new Random();
random.setSeed(seed);
for (int i = 0; i < ARR_LENGTH; ++i) {
unSortArray[i] = Math.abs(random.nextInt() % 100);
}
// [77, 67, 8, 2, 88, 95, 75, 14, 41, 75]
System.out.println(Arrays.toString(unSortArray));
bubbleSort(unSortArray);
// [2, 8, 14, 41, 67, 75, 75, 77, 88, 95]
System.out.println(Arrays.toString(unSortArray));
}
static void bubbleSort(int[] arr) {
if (arr.length < 2) {
return;
}
// 记录元素移动次数
int count;
int loopTimes = arr.length - 1;
while (true) {
count = 0;
for (int i = 0; i < loopTimes; i++) {
if (arr[i] > arr[i + 1]) {
swap(arr, i, i + 1);
count++;
}
}
if (count == 0) {
return;
}
loopTimes--;
}
}
static void swap(int[] arr, int idx, int oIdx) {
int temp = arr[idx];
arr[idx] = arr[oIdx];
arr[oIdx] = temp;
}
}
浙公网安备 33010602011771号