三大经典简单排序算法(选择,插入,交换)
选择排序
public static void main(String[] args) {
int[] arr = {4, 5, 76, 3, 73, 67546, 734, 56, 4, 324, 36, 3, 44, 234, 36, 54, 6, 242, 35, 3};
//选择排序
//从小到大
int len = arr.length;
int k = 0;
int temp = 0;
for (int i = 0; i < len - 1; i++) {
k = i;
for (int j = i + 1; j < len; j++) {
//每次找最小 假如k第几小数的下标
if (arr[j] < arr[k]) {
//加入arr i 是最小的 如果有比arr i还要小的 先记录 为 k
k = j;
}
}
if (k == i) {
//不用发生交换
continue;
} else {
//找第小 需要交换
temp = arr[i];
arr[i] = arr[k];
arr[k] = temp;
}
}
System.out.println("after sorted " + Arrays.toString(arr));
}
插入排序
public static void main(String[] args) {
int[] arr = {14, 5, 716, 3, 73, 67546, 734, 56, 44, 324, 36, 38, 44, 234, 36, 54, 6, 242, 35, 3};
//4
//4 5
//4 5 76
//3 4 5 76
//插入排序
//从小到大
int length = arr.length;
for (int i = 1; i < length; i++) {
int j = i - 1;
/*while (arr[i] < arr[j]) {
//后面数大于前面的数 尽可能的找小于该数的下标 下标 j 前移 直到移到-1
j--;
if (j == -1) {
break;
}
}*/
while (j != -1 && arr[i] < arr[j]) {
//后面数大于前面的数 尽可能的找小于该数的下标 下标 j 前移 直到移到-1
j--;
}
if (j + 1 == i) {
//没有发生移动 break
continue;
} else {
//发送了移动 记录要插入的数为temp 找到的下标+1 (j+1) 往后移腾出位置 给temp
int temp = arr[i];
for (int k = i - 1; k >= j + 1; k--) {
arr[k + 1] = arr[k];
}
//找到位置后 插入temp
arr[j + 1] = temp;
}
}
System.out.println("after sorted " + Arrays.toString(arr));
}
交换排序(冒泡排序)
public static void main(String[] args) {
int[] arr = {4, 5, 76, 3, 73, 67546, 734, 56, 4, 324, 36, 3, 44, 234, 36, 54, 6, 242, 35, 3};
//冒泡排序
//从小到大
int length = arr.length;
int temp = 0;
for (int i = 0; i < length-1; i++) {
for (int j = 0; j < length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
System.out.println("after sorted " + Arrays.toString(arr));
}