数组的排序
冒泡排序
算法思想 : 从头开始依次比较两个相邻的元素 如果后面一个比前面一个大 说明顺序不对,则将两个交换,本次循环完成后从头开始,直到没有发生交换为止.
给你一个栗子
对5 2 3 1 4排序
首先 5 和 2 比较 5>2 , 将5 和 2 交换位置 之后的元素按照同样的方法进行比较交换
第一次比较交换完成后 2 5 3 1 4
第二次比较交换完成后 2 3 5 1 4
第三次比较交换完成后 2 3 1 5 4
第四次比较交换完成后 2 3 1 4 5
至此 第一次循环完成 (完成第一次排序)
之后每循环一次完成一次排序 直至没有发生交换 此时意味着排序完成
int [] a=new int[]{5 ,2 , 3, 1 ,4};
for (int i = 0; i < a.length-1; i++) {
for (int j = 0; j < a.length-i-1; j++) {
//a.length-i-1 因为 5个元素进行了四次比较
if (a[j]>a[j+1]){
int temp=a[j]; //将两个元素交换
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
System.out.println(Arrays.toString(a));
选择排序
算法思想 : 首先在未排序的序列中,找到最大(小)的元素,存放到排序序列的起始位置,然后,再从剩余的未排序的元素中继续寻找最大(小)元素,然后放在已排序列的队尾
给你一个栗子
还是 5 2 3 1 4 的排序
首先通过一轮循环比较找出最小的元素 1 然后将 1 放到第一个位置 当做已排序列的第一个元素
此时 1 5 2 3 4
再次循环 找出5 2 3 4中最小的匀速为 2 将2 放入 已排序列 的1 之后
此时 1 2 5 3 4
再次循环 找出 5 3 4中最小的元素为 3 将 3 放入已排序列 1 2 之后
此时 1 2 3 5 4
再次循环 找出 5 4 中最小的元素为 4 将4放入 已排序列1 2 3 之后
此时 1 2 3 4 5
排序完成
int [] a=new int[]{5 ,2 , 3, 1 ,4};
for (int i = 0; i < a.length-1; i++) {
for (int j = i; j <a.length -1; j++) {
if (a[i]>a[j+1]){
int temp=a[i] ;
a[i]=a[j+1];
a[j+1]=temp;
}
}
}
System.out.println(Arrays.toString(a));
插入排序
算法思想 : 每次将一个待排序的数据按照大小插入到前面已排队列中,直到数据插入完成
给你一个栗子
又是 5 2 3 1 4 的排序
用一个临时变量存储要排序的元素 4
记下4 的位置 , 然后让4 和之前的元素一一比较 寻找出比4大的元素 5 将 4 插入5 的后面
5 之后的元素 统一向后挪一位
此时 4 5 2 3 1
之后 记录1的位置 然后让1 和之前的元素一一比较 , 寻找出比1大的元素 4 将 1 插入4 的后面
4 之后的元素 统一向后挪一位
此时 1 4 5 2 3
之后的元素均按此方法一一排序, 直至排序完成
int [] a=new int []{2,5,6,3};
for (int i = 0; i < a.length; i++) {
//外层循环取出每次排序需要比较的数
int current=a[i]; //记录当前比较的 数 例 数a
for (int j = i-1; j >=0; j--) {
//内层循环进行比较 取出的数 上层循环中取出的数 之前的数 取出a之前的数
if (current<a[j]){
a[j+1]=a[j];
a[j]=current;
}
}
}
System.out.println(Arrays.toString(a));