冒泡排序
基本思想及实现步骤:
1.比较两个相邻元素,如果第一个比第二个大,就交换两个元素
2.对每一个元素作同样的操作,从开始到结尾,这样最后一个元素就是最大数
3.重复上面的操作,除了已放置的元素
趟数: 元素个数 - 1 次数: 元素个数 - 趟数 -1
public class MaoPaoDemo {
public static void main(String[] args) {
//准备需要排序的数组
int[] arrs = {1,5,8,2,4,6,12,65,34,32,22,18,15};
System.out.println("排序前:"+Arrays.toString(arrs));
//冒泡排序法,通过两两比较,每一轮比较,得到一个最大数
for (int i = 0; i < arrs.length-1; i++) {
for (int j = 0; j < arrs.length-i-1; j++) {
//当前元素与后一个元素进行比较,如果后一个元素比当前数小,进行交换
if(arrs[j]>arrs[j+1]) {
//当前元素放入临时变量
int temp = arrs[j];
//后一个元素,赋值给当前元素
arrs[j] = arrs[j+1];
//临时变量放入后一个元素中,这样就完成交换
arrs[j+1] = temp;
}
}
}
System.out.println("排序后:"+Arrays.toString(arrs));
}
}
选择排序
基本思想及实现步骤:
1.找到所有值的最大或最小值,并记录下标
2.通过最大或最小值的下标,与最后一个位置的值进行交换,这样每次找到最大或最小值,固定在末尾
3.循环上两个步骤
public class ChooseSortDemo {
public static void main(String[] args) {
// 选择排序法,每次记录最大或最小值下标
// 准备需要排序的数组
int[] arrs = { 1, 5, 8, 2, 4, 6, 12, 65, 34, 32, 22, 18, 15 };
System.out.println("排序前:"+Arrays.toString(arrs));
for (int i = 0; i < arrs.length; i++) {
int index = 0;//记录最大或最小值下标
//循环次数,每次拿默认第一个元素,与第二个元素开始进行比较
for (int j = 1; j < arrs.length-i; j++) {
if(arrs[index]<arrs[j]) {
index = j;
}
}
//交换两个数据
int temp = arrs[arrs.length-1-i]; //因为每一轮都需要往前移动,所以需要减i
arrs[arrs.length-1-i] = arrs[index];
arrs[index] = temp;
}
System.out.println("排序后:"+Arrays.toString(arrs));
}
}
插入排序
基本思想及步骤:
1.将第一个元素作为默认已排序元素
2.取出下一个元素,在已排序元素中比较,如果比当前元素大,往后移
3.直到找到比自己小的元素,将当前元素放置在这个元素之后,如果都没找到,放置在第一位
4.重复上面的步骤
public class InsertSortDemo {
public static void main(String[] args) {
// 插入排序
//准备数组
int[] nums = {1,43,56,32,55,6,8,4,34,12,45,9,5,56,46};
System.out.println("排序前:"+Arrays.toString(nums));
/*
* 第一个默认已排序,从1开始遍历,每个数组都需要向前扫描
* 将下一个元素,取出,并比较
*/
for (int i = 1; i < nums.length; i++) {
int temp = nums[i];
int j; //定义出来,用于插入数据的下标
//在前面的元素中进行比较,i为取出元素下标
//需要循环遍历的是已排序元素
for(j=i-1;j>=0;j--) {
if(temp<nums[j]) {
//取出元素小于当前元素,当前元素,当前元素往后移动
nums[j+1] = nums[j];
}else
break;
}
//结束查找,放置在比自己小的元素后面
nums[j+1] = temp;
}
System.out.println("排序后:"+Arrays.toString(nums));
}
}