超详细的Java实现冒泡排序、选择排序、插入排序[超容易理解]❀❀❀
冒泡排序
步骤分析及介绍
- 由下图可知,就是比较两个相邻的元素,大的数字将往后面移动(怎么实现后移动呢?),所以每次比较之后都会得到一个较大的数字放在最后,而放到最后的数字就不需要比较了,即每次比较后,相邻两个元素的比较次数都相对减少(相对减少多少呢?)。
- 接下来我们分析怎么将大的数字往后移动,这时候就需要一个中间变量temp,如果a[i]>a[i+1],我们就可以将a[i]赋值给temp,然后再将a[i+1]赋值给a[i],再将temp中的a[i]赋值给a[i+1],这样子就是实现了大的往后移了。
- 分析比较的轮数和比较次数,如下图,一共有九个数,我们需要比较8轮。
第一轮------两两比较8次
第二轮------两两比较7次
第三轮------两两比较6次
第四轮------两两比较5次
…
第七轮------两两比较2次
第八轮------两两比较1次
图片演示过程如下
代码实现
public class PaiXuDemo {
public static void main(String[] args) {
//键盘实现输入
Scanner scanner = new Scanner(System.in);
//定义一个数组长度为5的数组
int[] arr = new int[8];
System.out.println("请输入5个数字");
//使用for循环实现数组的数字输入
for (int i=0;i<arr.length;i++){
arr[i]=scanner.nextInt();
}
//i表示比较的轮数,arr.length-1表示数组长度减一
for (int i=0;i<arr.length-1;i++){
//j表示两比较的次数
for (int j=0;j<arr.length-i-1;j++){
//实现数字大的往后移
if (arr[j]>arr[j+1]){
int temp = arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
//使用for循环遍历输出数组中的每一个数字
for (int n=0;n<arr.length;n++){
System.out.print(arr[n]+" ");
}
}
选择排序
步骤分析及介绍
1、如下图所示:我们可以看到它是以未排序的第一个位置的数字开始,依次从第二个数字开始往后逐个数字比较。当发现前面数字比后面的某一个位置的数字大时,就将前面的数字与后面这个数字交换位位置(这个怎么交换呢??),然后继续往后比较,前面比较完的数字就得到有序数字,经过多轮和多次比较将得到有序的数组元素(需要比较多少论和多少次呢)。
2、接下来我们分析怎么将前面的数字与后面的数字交换位置,这时候就需要一个中间变量temp,如果a[i]>a[j],我们就可以将a[i]赋值给temp,然后再将a[j]赋值给a[i],再将temp中的a[i]赋值给a[j],这样子就是实现了前面的数字与后面的数字交换位置
3、分析比较的轮数和比较次数,如下图,一共有7个数,我们需要比较6轮
第一轮------比较6次
第二轮------比较5次
第三轮------比较4次
…
第六轮------比较1次
图片演示过程如下
代码实现
//数组的定义以及键盘输入数组元素与冒泡排序一致,我这里就不再一写了哈哈哈哈!!!直接来重点代码!!!!!!!!!!!
// k控制轮数,这里从第一个数开始,比较的轮数即数组长度减一
for (int k=0;k<arr.length-1;k++){
//l控制每轮比较的次数,就是以前面的数的第二个数开始,前面的数与后面的每一个数字进行比较
for (int l=k+1;l<arr.length;l++){
//实现前面的数与后面的数交换位置
if (arr[k]>arr[l]){
int temp = arr[k];
arr[k] = arr[l];
arr[l] = temp;
}
}
}
插入排序
步骤分析及介绍
1.以第一个元素开始,该元素可以认为已经被排序,则取出下一个元素,在已经排序的元素序列中从后向前扫描,如果后面的一个元素和前面的元素比较,如果后面的元素比前面的小,则继续往前面比较,直到比前面某个数字大的时候,则将后面的元素插入到前面元素小的前面,也就是前面大的元素往后移一个位置,让后面比较的元素插入,然后结束比较。
2.如下图所示,一共比较7轮
图片演示过程如下
代码实现
//数组的定义以及键盘输入数组元素与冒泡排序一致,我这里就不再一写了哈哈哈哈!!!直接来重点代码!!!!!!!!!!!
//控制比较的轮数
for (int n=1;n<arr.length;n++){
int temp = arr[n];
//比较的次数
for (int m=n;m>0;m--){
//判断后面的数跟前面比较那个大
if (temp < arr[m-1]){
//将前面的数往后面移动留出位置给小的数插入
arr[m]=arr[m-1];
arr[m-1] = temp;
}
}
}
小结
个人理解,大佬多多指点!!!