/*
冒泡排序的代码实现
思路:
两个两个比较,大的值往后放,第一次比较完之后,最大值出现在
最大索引处;依次这样比较,可以得到一个排好序的数组!
*/
class BubbleSort{
public static void main(String[] args){
//定义一个数组:
int[] arr = {11,60,87,50,13} ;
bubbleSort1(arr) ;
printArray(arr) ;
}
/*
两个明确
1)明确返回值类型:void
2)参数个数,参数类型:1个,int []arr
*/
public static void bubbleSort1(int[] arr){
for(int x = 0 ; x <arr.length-1 ; x ++){ //控制比较的次数
for(int y = 0 ; y < arr.length-1-x; y++){
//如果前面比后面元素大,往后移动
if(arr[y]>arr[y+1]){
int temp = arr[y] ;
arr[y] = arr[y+1] ;
arr[y+1] = temp ;
}
}
}
}
public static void printArray(int[] arr){
//[
System.out.print("[");
//遍历数组
for(int x = 0 ; x < arr.length ; x ++){
if(x==arr.length-1){
System.out.println(arr[x]+"]");
}else{
System.out.print(arr[x]+", ") ;
}
}
}
}
下面是实现步骤
class BubbleSort{
public static void main(String[] args){
//定义一个数组:
int[] arr = {11,60,87,50,13} ;
//排序前
System.out.println("排序前: ") ;
printArray(arr) ;
/*
//第一次比较
//为了防止数组角标越界: arr.length-1
for(int x = 0 ; x < arr.length-1-0 ; x++){
//判断:如果后面的该x索引对应的元素值大于后面的元素x+1,往后放
if(arr[x] >arr[x+1]){
//采用中间变量的方式互换
int temp = arr[x] ;
arr[x] = arr[x+1] ;
arr[x+1] = temp ;
}
}
//第二次比较(有一个不比)
//为了防止数组角标越界: arr.length-1
//为了减少比较的次数:arr.length-1-1
for(int x = 0 ; x < arr.length-1-1;x++){
if(arr[x]>arr[x+1]){
int temp = arr[x] ;
arr[x] = arr[x+1] ;
arr[x+1] = temp ;
}
}
//第三次比较(有一个不比)
//为了防止数组角标越界: arr.length-1
//为了减少比较的次数:arr.length-1-2
for(int x = 0 ; x < arr.length-1-2;x++){
if(arr[x]>arr[x+1]){
int temp = arr[x] ;
arr[x] = arr[x+1] ;
arr[x+1] = temp ;
}
}
//第四次比较(有一个不比)
//为了防止数组角标越界: arr.length-1
//为了减少比较的次数:arr.length-1-3
for(int x = 0 ; x < arr.length-1-3;x++){
if(arr[x]>arr[x+1]){
int temp = arr[x] ;
arr[x] = arr[x+1] ;
arr[x+1] = temp ;
}
}
*/
//上述代码重复度高,代码臃肿!
//循环的思想 :数了下比较的次数,4次
/*
for(int x = 0 ; x <4 ; x ++){ //控制比较的次数
for(int y = 0 ; y < arr.length-1-x; y++){
//如果前面比后面元素大,往后移动
if(arr[y]>arr[y+1]){
int temp = arr[y] ;
arr[y] = arr[y+1] ;
arr[y+1] = temp ;
}
}
}
*/
//改进: 外层循环:arr.lengt-1:比较的次数
for(int x = 0 ; x <arr.length-1 ; x ++){ //控制比较的次数
for(int y = 0 ; y < arr.length-1-x; y++){
//如果前面比后面元素大,往后移动
if(arr[y]>arr[y+1]){
int temp = arr[y] ;
arr[y] = arr[y+1] ;
arr[y+1] = temp ;
}
}
}
System.out.println("排序后: ") ;
printArray(arr) ;
System.out.println("--------------") ;
//最终版的格式:使用方法改进
bubbleSort1(arr) ;
//遍历
printArray(arr) ;
}
/*
两个明确
1)明确返回值类型:void
2)参数个数,参数类型:1个,int []arr
*/
public static void bubbleSort1(int[] arr){
for(int x = 0 ; x <arr.length-1 ; x ++){ //控制比较的次数
for(int y = 0 ; y < arr.length-1-x; y++){
//如果前面比后面元素大,往后移动
if(arr[y]>arr[y+1]){
int temp = arr[y] ;
arr[y] = arr[y+1] ;
arr[y+1] = temp ;
}
}
}
}
public static void printArray(int[] arr){
//[
System.out.print("[");
//遍历数组
for(int x = 0 ; x < arr.length ; x ++){
if(x==arr.length-1){
System.out.println(arr[x]+"]");
}else{
System.out.print(arr[x]+", ") ;
}
}
}
}