一、冒泡排序
1.基本思想
2.将数组第一个数与其后面的数依次比较
(1)如果大于,就与该数的的值互换
(2)如果小于,则不变
(3)最终数组第一个数就是最小的数了
3.重复第一步骤,将第二个数与其后面的数进行比较
(1)需要重复arr.length - 1轮的比较
(2)每一轮都确定了第 i 个位置的值
代码实现:
public static void BubbleSort(int[] sort){
boolean flag = false;//判断flag
for (int i = 0; i < sort.length - 1; i++) {
for (int j = i; j < sort.length; j++) {//该层循环结束就确定了第i个位置的值
if (sort[i] > sort[j]) {
flag = true;
int temp = sort[j];
sort[j] = sort[i];
sort[i] = temp;
}
}
System.out.println("第" + i + "趟排序结果:");
for (int k = 0; k < sort.length; k++) {
System.out.print(sort[k] + "\t");
}
System.out.println();
if (flag == false) {//说明在第i次循环时,没有发生过交换
break;
}
}
}
二、选择排序
1.思路分析
(1)首先确定需要进行arr.length - 1轮选择
(2)每一轮确定一个最小值,然后将其赋给数组的相应位置
代码实现:
public class SelectionSort {
public static void main(String[] args) {
int[] arr = new int[]{1,3,2,7,5,-1,0,89,13,24,45,33};
SelectionSort(arr);
System.out.println(Arrays.toString(arr));
//创建一个80000个数的随机数组
int[] ran = new int[80000];
for (int i = 0; i < ran.length; i++) {
ran[i] = (int)(Math.random() * 800000);
}
Date date1 = new Date();
SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//格式化
String date1Str = simpleDateFormat1.format(date1);
System.out.println("排序前的时间:" + date1Str);
SelectionSort(ran);
Date date2 = new Date();
SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//格式化
String date2Str = simpleDateFormat2.format(date2);
System.out.println("排序后的时间:" + date2Str);
}
public static void SelectionSort(int[] arr){
for (int i = 0; i < arr.length - 1; i++) {
int min = arr[i];
int minIndex = i;
for (int j = i + 1; j < arr.length; j++) {
if(min > arr[j]){
min = arr[j];
minIndex = j;
}
}
//arr[0] = min,但是在此之前要把arr[0]给保留住,因为这个数还要进行接下来的比较
arr[minIndex] = arr[i];
arr[i] = min;
}
// for (int i = 0; i < arr.length; i++) {
// System.out.print(arr[i] + "\t");
// }
}
}