冒泡排序
需求 :将一组数据按照升序顺序排序
解决思路:
第一步:寻找最大值并将其放在最后面
第二步:将第一步寻找到的最大值去掉后继续第一步 (循环数组长度-1次)
第三步:完成排序
寻找最大值并将其放在最后面
int num[] = {3,2,0,5,4,1};
int centerNum = 0;//中间变量 用于存放较大的值
for (int j = 0; j< num.length-1; j++) {//将最大值放到数组的最后面
if(num[j]>num[j+1]) {
centerNum=num[j];
num[j] = num[j+1];
num[j+1] = centerNum;
}
}
第二步:将第一步寻找到的最大值去掉后继续第一步 (循环数组长度-1次)
for (int i = 0; i < num.length-1; i++) {//循环数组长度-1次
for (int j = 0; j< num.length-i-1; j++) {//每次结束后去掉已经找出的最大值
if(num[j]>num[j+1]) {
centerNum=num[j];
num[j] = num[j+1];
num[j+1] = centerNum;
}
}
}
冒泡排序实现
package com.qingsu.basis;
import java.util.Scanner;
public class Array {
public static void main(String[] arsg) {
//冒泡排序
int num[] = {3,2,0,5,4,1};
int centerNum = 0;//中间变量 用于存放较大的值
for (int i = 0; i < num.length-1; i++) {//循环数组长度-1次
for (int j = 0; j< num.length-i-1; j++) {//每次结束后去掉已经找出的最大值
if(num[j]>num[j+1]) {
centerNum=num[j];
num[j] = num[j+1];
num[j+1] = centerNum;
}
}
System.out.print("第"+(i+1)+"次数值比较排序结果:");
for (int k = 0; k < num.length; k++) {
System.out.print(num[k]+"\t");
}
System.out.println();
}
//分析 3,2,0,5,4,1
//第一次数值比较循环 比较5次 3>2 ==> 2 3 | 3>0 ==>2 0 3 | 3<5 ==>2 0 3 5 | 5>4 ==>2 0 3 4 5 | 5>1==>2 0 3 4 1 5
//2 0 3 4 1 5
//第二次数值比较循环 比较4次 2>0 ==> 0 2 | 2<3 ==>0 2 3 | 3<4 ==>0 2 3 4 | 4>1 ==>0 2 3 1 4 |
//0 2 3 1 4 5
//第三次数值比较循环 比较3次 0<2 ==> 0 2 | 2<3 ==>0 2 3 | 3>1 ==>0 2 1 3
//0 2 1 3 4 5
//第四次数值比较循环 比较2次 0<2 ==> 0 2 | 2>1 ==>1 2
//0 1 2 3 4 5
//第五次数值比较循环 比较1次 0<1 ==> 0 1
//0 1 2 3 4 5
System.out.print("最终排序结果:");
for (int i = 0; i < num.length; i++) {
int j = num[i];
System.out.print(num[i]+"\t");
}
}
}
打印台输出结果
分析 以{3,2,0,5,4,1}为例
初始数据 :3 2 0 5 4 1
进行第一次最大值寻找并置后循环 内层循环共比较5次
第一次比较:3>2 数组顺序交换后的结果 2 3 0 5 4 1
第二次比较:3>0 数组顺序交换后的结果 2 0 3 5 4 1
第三次比较:3<5 数组顺序不变后的结果 2 0 3 5 4 1
第四次比较:5>4 数组顺序交换后的结果 2 0 3 4 5 1
第五次比较:5>1 数组顺序交换后的结果 2 0 3 4 1 5
去掉第一次寻找的最大值5 进行第二次最大值并置后循环 内层循环共比较4次
第一次比较:2>0 数组顺序交换后的结果 0 2 3 4 1 (5)
第二次比较:2<3 数组顺序不变后的结果 0 2 3 4 1 (5)
第三次比较:3<4 数组顺序不变后的结果 0 2 3 4 1 (5)
第四次比较:4>1 数组顺序交换后的结果 0 2 3 1 4 (5)
去掉第二次寻找的最大值4 进行第三次最大值并置后循环 内层循环共比较3次
第一次比较:0<2 数组顺序不变后的结果 0 2 3 1 (4) (5)
第二次比较:2<3 数组顺序不变后的结果 0 2 3 1 (4) (5)
第三次比较:3>1 数组顺序交换后的结果 0 2 1 3 (4) (5)
去掉第三次寻找的最大值3 进行第四次最大值并置后循环 内层循环共比较2次
第一次比较:0<2 数组顺序不变后的结果 0 2 1 (3) (4) (5)
第二次比较:2>1 数组顺序交换后的结果 0 1 2 (3) (4) (5)
去掉第四次寻找的最大值2 进行第五次最大值并置后循环 内层循环共比较1次
第一次比较:0<1 数组顺序不变后的结果 0 1 (2) (3) (4) (5)
排序完成
外层循环数据
第1次:2 0 3 4 1 5
第2次:0 2 3 1 4 5
第3次:0 2 1 3 4 5
第4次:0 1 2 3 4 5
第5次:0 1 2 3 4 5
由上数据可知 冒泡排序每次的目标是寻找本次循环的最大值 并将其置后
排序算法
int temp;
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]){
temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
}
}
}
Java排序API
在现实开发中我们不会真的写一个排序算法进行排序 我们通常使用API进行数据的排序
比如 数据的升序
我们便使用Arrays.sort(num);
进行升序排序
package com.qingsu.basis;
import java.util.Arrays;
public class Array {
public static void main(String[] arsg) {
//排序API
int num[] = {655,55,1,3,6645,52};
Arrays.sort(num);
for (int i : num) {
System.out.println(i);
}
}
}