packagesort;
importjava.util.Arrays;
//简单冒泡排序
//冒泡排序重复地走过要排序的数列,一次比较两个元素,若顺序错误就把他们交换,直到没有需要交换
publicclassBubbleSort1 {
//比较相邻的元素,若第一个比第二个大,就交换,对每一对相邻元素做同样工作,从开始第一对到结尾最后一对。
//针对所有的元素重复以上的步骤,除了最后一个,持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
/*public static void bubble(int[]nums){
inttemp;
intsize = nums.length;
for(inti=0;i<size-1;i++){
for(intj=i+1;j<size;j++){
if(nums[i]>nums[j]){
temp=nums[i];
nums[i] =nums[j];
nums[j] =temp;
}
}
}
}*/ //严格上说这段代码不是标准的冒泡排序,因为它不满足“两两比较”,应该是最简单的交换排序,效率非常低
/*public static void bubble(int[]nums){
inttemp;
intsize = nums.length;
for(inti=0;i<size;i++){
for(intj=size-1;j>i;j--){
if(nums[j-1]>nums[j]){
temp=nums[j-1];
nums[j-1] =nums[j];
nums[j] =temp;
}
}
}
}*/ //这样的冒泡排序还可以优化,如果待排序的序列是{2,1,3,4,5,6,7,8,9},第一和第二的关键字交换后就没必要再交换了。
publicstaticvoidbubble(int[]nums){
inttemp;
intsize=nums.length;
intflag= 1;
for(inti=0;i<size&&flag==1;i++){
flag= 0;
for(intj=size-1;j>i;j--){
if(nums[j-1]>nums[j]){
temp=nums[j];
nums[j] =nums[j-1];
nums[j-1] =temp;
flag= 1;
}
}
}
} //对于{2,1,3,4,5,6,7,8,9},当i=2时已经对9和8,8和7..做了比较,没有交换的数据,说明序列已有序,不需要增加循环,可以增加一个标记变量flag实现改进
publicstaticvoidmain(String[]args) {
//TODOAuto-generated method stub
int[]nums={7,6,4,9,5,2,0,1,3,8};
bubble(nums);
System.out.println(Arrays.toString(nums));
}
}