写一点自己对冒牌排序的理解:
int[] arr = new int[length];
1,通过对比相邻2个数,得到最大/最小数;
1>从前往后比,每次筛选出最后一位
for(int i=0;i<arr.length-1;i++){ //需要对比几轮,最后一轮不用对比
for(int j=0;j<arr.length-i-1;j++){ //每轮需对比几次
//从0依次往后对比,结果最后一位是最小值
//找最小数,如果前一位比后一位小,则交换位置
if(arr[j]<arr[j+1]){
//定义一个临时变量做位置交换的容器
int temp;
//交换位置
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
第一轮对比得到最后一个位置的准确数。第二轮对比应该只比到倒数第二位,依次类推,另一种写法:
for(int i=arr.length;i>1;i--){//最后一轮不用比
for(int j=0;j<i-1;j++){
if(arr[j]<arr[j+1]){
int temp;
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
2>从后往前比,每次筛选出第一位
for(int i=0;i<arr.length-1;i++){
for(int j=arr.length-1;j>i;j--){
//从最后一位开始比
if(arr[j]<arr[j-1]){
int temp;
temp=arr[j];
arr[j]=arr[j-1];
arr[j-1]=temp;
}
}
}
2,取一个位置上的数,分别和其他数做对比,确定该位置的准确数
for(int i=0;i<arr.length-1;i++){
for(int j=i+1;j<arr.length;j++){
if(arr[i]<arr[j]){
int temp;
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
这种方式从前往后和从后往前,没什么区别
菜鸟笔记,大神留情!