一贯作风,不说废话,代码走起
先是测试代码:
@Test
public void test1() {
//随机生成length为10 的数组
int[] arr=new int[10];
for (int i=0;i<arr.length;i++) {
arr[i]=(int)(Math.random()*10);
}
System.out.println("冒泡排序");
bubbleSort(arr);
System.out.println("选择排序");
selectSort(arr);
System.out.println("插入排序");
insertSort(arr);
}
各排序法:
/**
* 冒泡排序
* @param arr 需排序的数组
*/
public void bubbleSort(int[] arr) {
int temp;
//排序的次数
for(int i=1;i<arr.length;i++) {
//将0到arr.length-i之间的最大值,移动到arr.length-i位置
for(int j=0;j<arr.length-i;j++) {
//前一个数字大,则交换位置
if(arr[j]>arr[j+1]) {
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
//输出每一步的排序结果
System.out.print("第"+i+"次的排序结果为:");
for (int num : arr) {
System.out.print(" "+num);//遍历输出当前的数组
}
System.out.println();//换行
}
}
/**
* 选择排序
* @param arr 需排序的数组
*/
public void selectSort(int[] arr) {
int temp,index;
//比较的首位置
//找到从i到arr.length-1之间的最小值的下标
for(int i=0;i<arr.length-1;i++) {
//默认最小值为i位置
index=i;
for(int j=i+1;j<arr.length;j++) {
//找到最小值得下标
if(arr[j]<arr[index]) {
index=j;
}
}
//把找到的最小值跟i位置的数字互换位置
temp=arr[index];
arr[index]=arr[i];
arr[i]=temp;
//输出每一步的排序结果
System.out.print("第"+(i+1)+"次的排序结果为:");
for (int num : arr) {
System.out.print(" "+num);//遍历输出当前的数组
}
System.out.println();//换行
}
}
/**
* 插入排序
* @param arr 需排序的数组
*/
public void insertSort(int[] arr) {
int temp;
int per;//上一个下标
for(int i=1;i<arr.length;i++) {
temp=arr[i];
per=i-1;
//当左边的值大于temp时,把这个已经比较过的值向右移动一位,再比较下一个坐标的值
while(per>=0&&arr[per]>temp) {
arr[per+1]=arr[per];
per--;
}
//否则,找到temp位置per+1,插入进去
arr[per+1]=temp;
//输出每一步的排序结果
System.out.print("第"+(i+1)+"次的排序结果为:");
for (int num : arr) {
System.out.print(" "+num);//遍历输出当前的数组
}
System.out.println();//换行
}
}