给个数组,按从大到小排序
选择排序
public static void selectSort(int[] arr) {
if (arr == null || arr.length < 2) {
return;
}
int length = arr.length;
//0~n-1 从 0-n-1范围选出最小的放在0下标
//1~n-1 从 1-n-1范围选出最小的放在1下标
//2~n-1 从 2-n-1范围选出最小的放在2下标
//3~n-1 从 3-n-1范围选出最小的放在3下标
int minValueIndex = 0;
for (int i = 0; i < length-1; i++) {
minValueIndex = i;
for (int j = i+1; j <= length - 1; j++) {
if (arr[j] < arr[minValueIndex]) {
minValueIndex = j;
}
}
swap(arr, i, minValueIndex);
}
}
冒泡排序
public static void bubbleSort(int[] arr) {
if (arr==null || arr.length<2){
return;
}
// 0~n-1 依次两两对比,大的往后走
// 0~n-2 依次两两对比,大的往后走
// 0~n-3 依次两两对比,大的往后走
// 0~n-4 依次两两对比,大的往后走
int length = arr.length;
for (int end = length-1; end >=0; end--) {
for (int j = 1; j <=end; j++) {
if (arr[j-1]>arr[j]){
swap(arr,j-1,j);
}
}
}
}
插入排序
public static void insertSort(int[] arr){
if (arr==null || arr.length<2){
return;
}
//0~0 排序 完成
//0~1 排序 1与0比较大小,小的往前走,如果交换,
// 判断前面是否还有东西,没有就停止,
// 有就继续上一步步骤比较大小
//0~2 排序 同上
//0~3 排序 同上
int length = arr.length;
for (int i = 1; i <= length-1; i++) {
int endIndex = i;
while (endIndex>0 && arr[endIndex-1]>arr[endIndex]){
swap(arr,endIndex-1,endIndex);
endIndex--;
}
}
}
数组输出
public static void printArr(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
数组元素交换
public static void swap(int[] arr, int first, int second) {
int temp = arr[first];
arr[first] = arr[second];
arr[second] = temp;
}
测试
public static void main(String[] args) {
int[] arr1 = {5, 9, 8, 2, 7, 3, 7, 2, 1, 4, 3};
int[] arr2 = {5, 9, 8, 2, 7, 3, 7, 2, 1, 4, 3};
int[] arr3 = {5, 9, 8, 2, 7, 3, 7, 2, 1, 4, 3};
printArr(arr1);
selectSort(arr1);
printArr(arr1);
printArr(arr2);
bubbleSort(arr2);
printArr(arr2);
printArr(arr3);
insertSort(arr3);
printArr(arr3);
}