-
备战秋招中,开始每天练习手写代码,后陆续更新面试常见手撕代码案例
- 欢迎同样在备战秋招的各位小伙伴们一起交流学习! -
今天从冒泡排序开始
-
刚开始学数据结构时代码(注释版)
import java.util.Arrays;
public class BubbleSort {
//冒泡排序,将数据按从小到大排序
public static void main(String[] args) {
int[] arr = {3, 9, -1, 10, 2};
bubbleSort(arr);
System.out.println("冒泡排序后的顺序为:"+Arrays.toString(arr));
}
public static void bubbleSort(int[] arr) {
int temp = 0;//临时变量,用来交换位置
boolean flag = false;//定义标签,来进行冒泡排序算法的优化,当不发生交换时,则停止算法,减少排序次数
//总共需要进行arr.length-1次排序
for (int i = 0; i < arr.length - 1; i++) {
//每次需要进行arr.length-1-i次排序,没进行一趟排序,则下一趟需要排序的次数减一
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {//将最大的值不断放到最后
flag = true;//如果进行过交换,则将flag置为true
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
if(!flag){
break;//如果flag为false,代表不在进行位置交换了,则直接终止代码,这是冒泡排序算法进行优化的核心
}else{
flag =false;//每次结束后都需要重新将flag置为false;
}
// System.out.println("第" + (i + 1) + "次排序后:" + Arrays.toString(arr));
}
}
}
- 手写代码(在Notepad++中手敲的,使用javac 和 java 命令执行)
import java.util.*;
public class BubbleSort{
public static void main(String[] args){
int[] nums = {3, 9, -1, 10, 2};
bubbleSort(nums);
System.out.println(Arrays.toString(nums));
System.out.println("---------------------------------");
bubbleSort2(nums);
System.out.println(Arrays.toString(nums));
}
// 从小到大
public static void bubbleSort(int[] nums){
boolean flag = false;
int n = nums.length;
for(int i = 0; i < n - 1 && !false; i++){
for(int j = 0; j < n - i - 1; j++){
if(nums[j] > nums[j+1]){
int temp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = temp;
flag = true;
}
}
if(!flag) break;
else flag = false;
// System.out.println( (i+1) + "==" + Arrays.toString(nums));
}
}
// 从大到小排序
public static void bubbleSort2(int[] nums){
boolean flag = false;
int n = nums.length;
for(int i = 0; i < n - 1 && !false; i++){
for(int j = 0; j < n - i - 1; j++){
if(nums[j] < nums[j+1]){
int temp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = temp;
flag = true;
}
}
if(!flag) break;
else flag = false;
// System.out.println( (i+1) + "==" + Arrays.toString(nums));
}
}
}