话不多说直接上代码(有注释)
package myStudy.dataStructure;
/**
*
* @description 简单排序(冒泡排序、选择排序、插入排序)
* @author shenrenfeng
* @date 2018年11月3日 下午8:37:41
*
*/
public class Day1 {
public static void main(String[] args) {
int[] array1 = {9,8,4,1,6,5,2,7,0,3};
int[] array2 = {4,0,8,1,9,3,5,2,7,6};
array1 = insertSort(array1);
array2 = insertSort(array2);
for(int i = 0; i < array1.length; i++) {
System.out.print(array1[i]);
System.out.print(" ");
}
System.out.println();
for(int j = 0; j < array2.length; j++) {
System.out.print(array2[j]);
System.out.print(" ");
}
}
/**
* 冒泡排序:依此比较相邻的两个元素的大小,将大的元素换到后面。两层循环,外层循环控制排序趟数,内层循环控制每一趟的具体排序比较次数
* @param array
* @return
*/
public static int[] bubbleSort(int[] array) {
for(int i = 0; i < array.length - 1; i++) {
for(int j = 0; j < array.length -i -1; j++) {
if(array[j] > array[j+1]) {
int cache = array[j];
array[j] = array[j+1];
array[j+1] = cache;
}
}
}
return array;
}
/**
* 选择排序(简单选择排序):每趟排序从待排序的元素中选取最小的元素出来组成新的排列,所有元素都选择完后排序即完成
* @param array
* @return
*/
public static int[] selectionSort(int[] array) {
for(int i = 0; i < array.length; i++) {
int min = i;// 每趟循环都将第一个元素作为默认最小值
for(int j = i; j < array.length - 1; j++) {
if(array[min] > array[j+1]) {// 用最小值和剩下的所有元素比较
min = j + 1;// 记录最小值的位置
}
}
// 将最小值和当前第一个元素交换
int cache = array[i];
array[i] = array[min];
array[min] = cache;
}
return array;
}
/**
* 插入排序(直接插入排序):从待排序的元素中选取一个插入到已有的序列当中
* @param array
* @return
*/
public static int[] insertSort(int[] array) {
for(int i = 1; i < array.length; i++) {
int j = i - 1;// 用于循环已经排好序的元素,已经排好序的元素的个数始终是i-1个
int cache = array[i];
int index = i;// 用于记录最后一个往后移的元素的位置,这个位置即是要插入的位置
while(j >= 0 && cache < array[j]) {
array[j+1] = array[j];// 如果要插入的数据比前一个数据要小,将前一个数据后移一位
index = j;
j--;
}
array[index] = cache;// 插入数据
}
return array;
}
}