目录
一、排序算法
1. 冒泡排序
思路: 每次冒泡操作都会对相邻的两个元素进行比较,每一轮排序就找出未排序序列中最大值放在最后。
优化:第一版优化增加flag标记,没有数字交换直接return,最优时间复杂度O(n) 。第二版优化,增加tempPostion记录内循环最后一次交换的位置,来缩减内循环的次数
public static void bubbleSort(int[] array) {
int len = array.length - 1;
int temp; // 开辟一个临时空间, 存放交换的中间值
int tempPostion = 0; // 记录最后一次交换的位置
// 要遍历的次数
for (int i = 0; i < array.length - 1; i++) {
int flag = 1; // 设置一个标志位
// 依次的比较相邻两个数的大小,遍历一次后,把数组中第i小的数放在第i个位置上
for (int j = 0; j < len; j++) {
// 比较相邻的元素,如果前面的数大于后面的数,交换
if (array[j] > array[j + 1]) {
temp = array[j + 1];
array[j + 1] = array[j];
array[j] = temp;
flag = 0; // 发生交换,标志位置0
tempPostion = j; // 记录交换的位置
}
}
len = tempPostion; // 把最后一次交换的位置给len,来缩减内循环的次数
if (flag == 1) {// 如果没有交换过元素,则已经有序
// System.out.println(Arrays.toString(array));
return;
}
}
// System.out.println(Arrays.toString(array));
}
public static void main(String[] args) {
int arr[] = {2, 4, 7, 6, 8, 5, 9};
bubbleSort(arr);
System.out.println(Arrays.toString(arr));
}
function bubbleSort(arr){
for(var j = arr.length - 1; j >= 1; j--){
var done = true;
for(var i = 0; i <= j - 1; i++){
if(arr[i] > arr[i + 1]){
var temp = arr[i + 1];
arr[i + 1] = arr[i];
arr[i] = temp;
done = false;
}
}
if(done){
break;
}
}
return arr;
}
2. 选择排序
思路:对于给定的一组记录,经过第一轮比较后得到最小的记录,然后将该记录的位置与第一个记录的位置交换;重复该过程,直到进行比较的记录只剩下一个为止。
public static void selectSort(int[] array) {
int len = array.length;
for (int i = 0; i < len; i++) {//确定每次开始的位置
int min = array[i];//设定开始数字为最小的值最小值
int flag = i;
for (int j = i + 1; j < len; j++) {//把最小值存放到min,从开始数字向后一个个和min比较,再把最小值存放到min
if (min > array[j]) {
min = array[j];
flag = j;
}
}
if (flag != i) {
array[flag] = array[i];
array[i] = min;
}
}
// System.out.println(Arrays.toString(array));
}
public static void main(String[] args) {
int arr[] = {2, 4, 7, 6, 8, 5, 9};
selectSort(arr);
System.out.println(Arrays.toString(arr));
}
function selectionSort(arr) {
var len = arr.length;
var minIndex, temp;
for(var i = 0; i< len-1;i++){
minIndex = i;
for(var j = i+1;j<len;j++) {
if(arr[j] < arr[minIndex]) {// 寻找最小的数
minIndex = j;
}
}
temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
return arr;
}