冒泡排序:即将一堆数字从小到大排序
基本思路:对未排序的各元素从头到尾依次比较相邻的两个元素大小关系,若大于则交换位置,经过第一轮比较排序后可得出最大值,然后使用同样的方法把剩下的元素逐个比较即可(可以看出若有n个元素,那么一共要进行n-1轮比较,第m轮要进行n-m次比较)
通过下面的分析我们可以得出最终代码===》
//冒泡排序
public class ArraySort {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = {12,4,1,66,54,6,74,-3};//静态创建一个数组
System.out.print( "改变前:");
for (int i : arr) { //通过增强for循环foreach打印每一个值
System.out.print(i + ",");
}
System.out.print("\n改变后:");
for (int j = 0; j < arr.length-1; j++) {
for (int i = 0; i < arr.length-j; i++) {
if (i < arr.length-1-j) { //if用来解决第一轮最后一次比较时下标越界的问题
if(arr[i] > arr[i+1]) {
int temp = arr[i];//声明一个变量temp作为中间量去实现交换
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
}
}
for (int i : arr) {
System.out.print(i + ",");
}
}
}
打印结果:
当然还有更简单的方法:===》利用jdk自带的方法直接调用
//冒泡排序
public class ArraySort {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = {12,4,1,66,54,6,74,-3};//静态创建一个数组
java.util.Arrays.sort(arr); //调用jdk自带的方法实现排序
String str = java.util.Arrays.toString(arr);//完美打印数组格式
System.out.println(str);
}
}
打印结果:
分析:int[] arr = {12,4,1,66,54,6,74,3};
//第1轮 得到最大的值放到最右边
//第1轮 第1次 比较第1个元素和第2个元素大小,如果第1个元素大于第2个元素,那么作交换
if(arr[0] > arr[1]){
int temp = arr[0];
arr[0] = arr[1];
arr[1] = temp;
}
//第1轮 第2次 比较第2个元素和第3个元素大小,如果第2个元素大于第3个元素,那么作交换
if(arr[1] > arr[2]){
int temp = arr[1];
arr[1] = arr[2];
arr[2] = temp;
}
//第1轮 第3次 比较第3个元素和第4个元素大小,如果第3个元素大于第4个元素,那么作交换
if(arr[2] > arr[3]){
int temp = arr[2];
arr[2] = arr[3];
arr[3] = temp;
}.......
//第1轮 第n次 比较第n个元素和第(n+1)个元素大小,如果第n个元素大于第(n+1)个元素,那么作交换
if(arr[n-1] > arr[n]){
int temp = arr[n-1];
arr[n-1] = arr[n];
arr[n] = temp;
}《===优化上面代码得到 计算每一轮===》
//第1轮 这里第一轮的轮数1+n的值=数组的长度length-1(具体情况具体判断),
比如如果i<n则此时的n=arr.length-1
for(int i=0;i<=n;i++){
if(arr[i] > arr[i+1]){
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
//第2轮 得到剩余最大的值放到剩余位置最右边
for(int i=0;i<=n-1;i++){
if(arr[i] > arr[i+1]){
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
//第3轮 得到剩余最大的值放到剩余位置最右边
for(int i=0;i<=n-2;i++){
if(arr[i] > arr[i+1]){
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}......
//第n-1轮 得到剩余最大的值放到剩余位置最右边
for(int i=0;i<=1;i++){
if(arr[i] > arr[i+1]){
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}//第n轮 得到剩余最大的值放到剩余位置最右边
for(int i=0;i<=0;i++){
if(arr[i] > arr[i+1]){
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}