冒泡排序
- 思路
从序列的一端开始往另一端冒泡,依次比较相邻两个数的大小 - 算法
public static void sort(int arr[]){
for(i=0;i<arr.length-1;i++) { // 对比轮数
for(j=0;j<arr.length;j++) {
if(arr[j] < arr[j+1]) {// 比较相邻两个数据(大-》小)
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
选择排序
- 思路
首先,找到数组中最小的元素,拎出来,将它和数组的第一个元素交换位置;第二步,在剩下的元素中继续寻找最小的元素,拎出来,将它和素组的第二个元素交换位置;依次循环,直到整个素组排序完成 - 算法
public static void sort(int arr[]){
for(i=0;i<arr.length;i++) {
int min = i; // 标记最小元素的下标
for(j=i+1;j<arr.length;j++) { // 找出剩下数组中最小的元素下标
if(arr[j] < arr[min]) [
min = j;
]
}
// 交换位置
int temp = arr[min];
arr[min] = arr[i];
arr[i] = temp;
}
}
插入排序
- 思路
在乱牌中抽一张出来,插入到左边,再抽一张出来,插入到左边,再抽一张,插入到左边,每次插入都插入到左边合适的位置,时刻保持左边的牌是有序的,直到右边的牌抽完,则排序完毕。
我们把数组中的数据分成两个区域,已排序区域和未排序区域,初始化的时候所有的数据都处在未排序区域中,已排序区域是空。 - 算法
public static void sort(int arr[]){
for(i=1;i<arr.length;i++) {
int value = arr[i]; // 抽取出的元素待插入
for(j=i-1;j >=0; j--) { // 找到合适位置插入(比较已排序的)
if(arr[j] > value) {
arr[j+1] = arr[j]; // 移动数据(往右移)
} else {
break;
}
}
arr[j+1] = value; // 插入
}
}