冒泡核心思想:
冒泡排序向右边冒泡的话,结果就是最后一个数就是最大的
冒泡排序向左边冒泡的话,结果就是第一个数就是最小的
这个好像不是冒泡吧。。。
private static void maoPaoSort(int [] arr){
for(int i=0;i<arr.length;i++){
for(int j=i+1;j<arr.length;j++){
if(arr[i]>arr[j]){
swap(arr,i,j);
}
}
}
}
常规冒泡
private static void maoPaoSort1(int [] arr){
for(int i=0;i<arr.length-1;i++){
for(int j=0;j<arr.length-1-i;j++){
if(arr[j]>arr[j+1]){
swap(arr,j,j+1);
}
}
}
}
flag标志是否已经有序
private static void maoPaoSort2(int [] arr){
for(int i=0;i<arr.length-1;i++){
boolean flag = false;
for(int j=0;j<arr.length-1-i;j++){
if(arr[j]>arr[j+1]){
swap(arr,j,j+1);
flag = true;
}
}
//说明已经有序
if(!flag){
return;
}
}
}
双向冒泡
private static void maoPaoSort3(int [] arr){
int left = 0,right = arr.length-1;
while(left<right){
for(int i=left;i<right;i++){
if(arr[i]>arr[i+1]){
swap(arr,i,i+1);
}
}
right--;
for(int j=right;j>left;j--){
if(arr[j]<arr[j-1]){
swap(arr,j,j-1);
}
}
left++;
}
}
双向冒泡+记录swapPos
private static void maoPaoSort4(int [] arr){
int left = 0,right = arr.length-1;
int swapPos = left;
while(left<right){
for(int i=left;i<right;i++){
if(arr[i]>arr[i+1]){
swap(arr,i,i+1);
swapPos = i;
}
}
right = swapPos;
for(int j=right;j>left;j--){
if(arr[j]<arr[j-1]){
swap(arr,j,j-1);
swapPos = j;
}
}
left = swapPos;
}
}