本篇文章针对上一篇的数组,实现几个简单的排序功能,并给出实现思路。包括冒泡、选择、插入三种最简单的排序。
1、冒泡排序:
实现思路图解:
public static void sort(int[] arr) {
/*
* 分析: 五个元素,总共比较了四次 比较次数为length-1 1、从尾部开始,与前面的元素两两比较,小了往前排。大了不搭理他
* 2、第一次比较完毕之后,下一次比较的时候会减少一次比较次数。减少的这次次数是数组前面的位置,因为每次比较之后最小值就在最前位置了
* 3、第一次比较有0个元素不必;第二次比较有1个元素不比,第三次比较,2个元素不比 4、比较次数length-1
*/
for (int i = 0; i < arr.length - 1; i++) {// 外层控制次数
// 定义临时变量
int temp;
// 比较的次数也会减少
for (int j = arr.length-1; j > i; j--) {
// 如果后面的数小
if (arr[j] < arr[j - 1]) {
// 交换到前面
temp = arr[j];
arr[j] = arr[j - 1];
arr[j - 1] = temp;
}
}
}
}
2、选择排序:
package ch02;
/**
* 选择排序
* @author lenovo
*
*/
public class SelectSort {
public static void sort(int[] arr){
//外循环控制次数
for (int i = 0; i < arr.length; i++) {
int k = i;//k赋初始值
int temp;
for (int j = i+1; j < arr.length; j++) {
if(arr[k] > arr[j]){
k = j;//让k值永远指向最小的索引
}
}
//交换,使得最前面的位置为最小值。即把k索引对应的值与i值交换
temp = arr[k];
arr[k] = arr[i];
arr[i] = temp;
}
}
}
3、插入排序;
package ch02;
/**
* 插入排序
*
* @author lenovo
*
*/
public class InsertSort {
public static void sort(int[] arr) {
int j = 0;// 数组下标
int i = 0;// 插入排序次数
// 从第二个位置开始比较
for (i = 1; i < arr.length; i++) {
// 每一次都记录下初始值赋值给临时变量
int temp = arr[i];
for (j = i - 1; j >= 0; j--) {//j表示上一个位置,j+1表示当前位置。往当前位置插入数据
// 前面的数大于当前临时变量里面的数
if (arr[j] > temp) {
// 把前面位置的值赋值给当前位置值
arr[j + 1] = arr[j];
} else {
break;
}
}
//就把temp值赋值给当前位置
arr[j + 1] = temp;
}
}
}