数组排序学习(一)-冒泡、选择、插入排序以及可视化的实现
数组排序学习(一)-冒泡、选择、插入排序以及可视化的实现
1、冒泡排序
1.1冒泡排序设计思路
- 冒泡排序就是从前向后两两比较
- 后面比较的数字小于前面一个数时,交换位置
- 每一次循环遍历都可以选出最大一个数排在末尾,遍历尺寸减一
1.2注意事项
- 可以优化内外循环,如果数组已经排序好可以跳出循环
- 注意每一次循环之后遍历长度都要减一
1.3代码实现
package com.xsx0817;
public class BubbleSort_2 {
public static void bubbleSort_2(int[] arr) {
if(arr==null||arr.length<2) {
System.err.println("输入的数组无法排序");
return;
}
int position=arr.length-1;
for(int i=0;i<arr.length-1;i++) {
boolean isOK=false;
int newposition=0;
int newposition2=0;
for(int j=0;j<position;j++) {
if(arr[j]>arr[j+1]) {
swap(arr,j,j+1);
isOK=true;
newposition=j;
}
System.out.print("第"+(i+1)+"次循环,"+"第"+(j+1)+"次排序后,数组为:");
for(int n=0;n<arr.length;n++) {
System.out.print(arr[n]+" ");
}
System.out.println(" ");
}
System.out.println(isOK);
if(!isOK) {
break;
}
position=newposition;
}
}
public static void swap(int[] arr,int i,int j) {
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
package com.xsx0817;
public class RunSort {
public static void main(String[] args) {
BubbleSort_2 bs_2=new BubbleSort_2();
int[] arr=new int[] {
5,3,1,4,2,6};
System.out.println(" ");
bs_2.bubbleSort_2(arr);
}
}
1.4双向冒泡排列
一次循环里从前往后从后往前遍历冒泡循环,加快效率
package com.xsx0817;
public class SupBubbleSort {
public static void supbubbleSort(int[] arr) {
if(arr==null||arr.length<2) {
System.err.println("输入的数组无法排序");
return;
}
int length=arr.length;
int preIndex=0;
int backIndex=length-1;
while(preIndex<backIndex) {
preswap(arr,length,preIndex);
preIndex++;
if(backIndex<=preIndex) {
break;
}
backswap(arr,backIndex);
backIndex--;
}
System.out.print("排序完数组的数组为:");
for(int i=0;i<arr.length;i++) {
System.out.print(arr[i]+" ");
}
System.out.println(" ");
}
public static void swap(int[] arr,int i,int j) {
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
public static void preswap(int[] arr,int length,int preIndex) {
for(int i=preIndex+1;i<length;i++) {
if(arr[preIndex]>arr[i]) {
swap(arr,i,preIndex);
System.out.print("从第"+(preIndex+1)+"个数开始排序循环,排序后,数组为:");
for(int n=0;n<arr.length;n++) {
System.out.print(arr[n]+" ");
}
System.out.println(" ");
}
}
}
public static void backswap(int[]arr,int backIndex) {
for(int j=backIndex-1;j>0;j--) {
if(arr[backIndex]<arr[j]) {
swap(arr,j,backIndex);
SwapUIListener.newpaint(arr);
System.out.print("从第"+(backIndex+1)+"个数开始排序循环,排序后,数组为:"