算法--冒泡排序-java实现

/*** @ClassName: BubbleSort 
* @Description: TODO(算法--冒泡排序) 
* @author szren 
* @date 2018年5月30日 下午1:22:31 
* * */
/**
 * 	原理:比较两个相邻的元素,将值大的元素交换至右端。
	思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。
			即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。
			然后比较第2个数和第3个数,将小数放前,大数放后,
			如此继续,直至比较最后两个数,将小数放前,大数放后。
			重复第一趟步骤,直至全部排序完成。
	举例说明:	要排序数组:int[] arr={6,3,8,2,9,1}; 
				第一趟排序:    
						第一次排序:6和3比较,6大于3,交换位置: 3 6 8 2 9 1    
						第二次排序:6和8比较,6小于8,不交换位置:3 6 8 2 9 1    
						第三次排序:8和2比较,8大于2,交换位置: 3 6 2 8 9 1    
						第四次排序:8和9比较,8小于9,不交换位置:3 6 2 8 9 1    
						第五次排序:9和1比较:9大于1,交换位置: 3 6 2 8 1 9    
					第一趟总共进行了5次比较, 排序结果: 3 6 2 8 1 9---------------------------------------------------------------------
				第二趟排序:    
						第一次排序:3和6比较,3小于6,不交换位置:3 6 2 8 1 9    
						第二次排序:6和2比较,6大于2,交换位置: 3 2 6 8 1 9   
						第三次排序:6和8比较,6大于8,不交换位置:3 2 6 8 1 9    
						第四次排序:8和1比较,8大于1,交换位置: 3 2 6 1 8 9    
					第二趟总共进行了4次比较, 排序结果: 3 2 6 1 8 9---------------------------------------------------------------------
				第三趟排序:    
						第一次排序:3和2比较,3大于2,交换位置: 2 3 6 1 8 9    
						第二次排序:3和6比较,3小于6,不交换位置:2 3 6 1 8 9    
						第三次排序:6和1比较,6大于1,交换位置: 2 3 1 6 8 9    
					第三趟总共进行了3次比较, 排序结果: 2 3 1 6 8 9---------------------------------------------------------------------
				第四趟排序:    
						第一次排序:2和3比较,2小于3,不交换位置:2 3 1 6 8 9    
						第二次排序:3和1比较,3大于1,交换位置: 2 1 3 6 8 9    
					第四趟总共进行了2次比较, 排序结果: 2 1 3 6 8 9---------------------------------------------------------------------
				第五趟排序:    
						第一次排序:2和1比较,2大于1,交换位置: 1 2 3 6 8 9    
					第五趟总共进行了1次比较, 
				排序结果: 1 2 3 6 8 9---------------------------------------------------------------------
				最终结果: 1 2 3 6 8 9---------------------------------------------------------------------
	由此可见:N个数字要排序完成,总共进行N-1趟排序,每i趟的排序次数为(N-i)次,所以可以用双重循环语句,外层控制循环多少趟,内层控制每一趟的循环次数,即
				for(int i=1;ii; j--){ 
					if(aa[j] < aa[j-1]){
						temp = aa[j]; 
						aa[j] = aa[j-1]; 
						aa[j-1] = temp; 
						} 
					} 
				}
			}
		private static void BubbleSortMethod2Youhua(int[] aa) {
			int temp;//临时变量
			boolean flag;//是否交换的标志
			for(int i=0; ii; j--){ 
					if(aa[j] < aa[j-1]){ 
						temp = aa[j]; 
						aa[j] = aa[j-1]; 
						aa[j-1] = temp; 
						flag = true; 
						} 
					} 
				if(!flag) break; 
				}
			}
		private static void BubbleSortMethod1Youhua(int[] aa) {
			System.out.println("数组的长度::"+aa.length);
			System.out.println("数组初始顺序::"+Arrays.toString(aa));
			for(int i=1;iaa[j+1]){//交换位置
						int temp =aa[j+1];
						aa[j+1]=aa[j];
						aa[j]=temp;
						flag = true;
						}else{//不交换}
							System.out.println("wo shi jjjjjjjj: "+j);
							}
					System.out.println("优化冒泡排序后的结果::"+Arrays.toString(aa));
					if(!flag){
						break;
						}
					}
				}
		}
			
			private static void BubbleSortMethod1(int[] aa) {
				System.out.println("数组的长度:"+aa.length);
				System.out.println("数组的初始顺序::"+Arrays.toString(aa));//冒泡排序算法
				for(int i=1;iaa[j+1]){//交换位置
							int temp =aa[j+1];
							aa[j+1]=aa[j];
							aa[j]=temp;
							}else{//不交换}
								System.out.println("wo shi jjjjjjjj: "+j);
								}
						System.out.println("冒泡排序后的结果::"+Arrays.toString(aa));
						}
					}
				
			}
}

你可能感兴趣的:(JAVA,算法)