排序
程序员文章站
2023-01-01 10:27:51
摘要 本文系Introduction to Java Programming 10e (Java语言程序设计-进阶篇)的学习笔记。涉及以下内容:插入排序冒泡排序归并排序快速排序堆排序桶排序和基数排序外部排序 一. 插入排序插入排序的时间复杂度是O(n^2)。插入排序重复地将新元素插入到一个排好序的子 ......
排序
一、冒泡排序
原版冒泡
//原版冒泡排序
//从前向后遍历
//相邻两数比较,不满足顺序则交换
int[] arr= new int[10];
for (int i = 0; i < arr.length; i++) {
arr[i] = (int)(Math.random()*100);
}
System.out.println(Arrays.toString(arr));
for (int i = 0; i < arr.length-1; i++) {
for(int j =0;j< arr.length-1-i;j++){
if(arr[j]>arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
System.out.println(Arrays.toString(arr));
优化后的冒泡
//优化过后的冒泡排序
int[] arr= new int[10];
for (int i = 0; i < arr.length; i++) {
arr[i] = (int)(Math.random()*100);
}
System.out.println(Arrays.toString(arr));
boolean isChanged = false; //当内层循环没变时候,即没有交换则已经有序,所以停止
for (int i = 0; i < arr.length-1; i++) {
for(int j =0;j< arr.length-1-i;j++){
isChanged = true;
if(arr[j]>arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
if(!isChanged)
System.out.println(i);
break;
}
System.out.println(Arrays.toString(arr));
二、选择排序
//外层循环控制第几个位置
//内层循环确定该位置的值
int[] arr= new int[10];
for (int i = 0; i < arr.length; i++) {
arr[i] = (int)(Math.random()*100);
}
System.out.println(Arrays.toString(arr));
for (int i = 0; i < arr.length-1; i++) {
int temp = arr[i]; //用于交换
int pos = i; //记录要交换的元素下标
for(int j = i+1; j<arr.length; j++){
if(temp>arr[j]){
temp = arr[j]; //temp用于暂存要交换的值
pos = j;
}
}
arr[pos] = arr[i]; //遍历完一遍后在交换
arr[i] = temp;
}
System.out.println(Arrays.toString(arr));
三、插入排序
int[] arr= new int[10];
for (int i = 0; i < arr.length; i++) {
arr[i] = (int)(Math.random()*100);
}
System.out.println(Arrays.toString(arr));
for(int i =1;i<arr.length;i++){
int temp = arr[i];
boolean isInsert = false;
for(int j =i-1;j>=0;j--){
if(arr[j]>temp){
arr[j+1] = arr[j];
}else {
arr[j+1] = temp;
isInsert = true;
break;
}
}
if(!isInsert){
arr[0] = temp;
}
}
System.out.println(Arrays.toString(arr));
持续更新中…
本文地址:https://blog.csdn.net/qq_43288259/article/details/112586467
下一篇: 战国四分五裂,为何统一后汉朝还打不赢了?