package test;
public class Sort {
public static void main(String[] args) {
int[] arr = {9,3,6,0,5,1,7,4,8,2};
simpleSort(arr);
// insertSort(arr);
// quickSort(arr);
// binarySort(arr, 0, arr.length-1);
out(arr);
}
//冒泡排序,加判断符还可以优化
public static void bubbleSort(int[] arr){
for(int i=0;i<arr.length;i++){
out(arr);//看看每一次循环后会变成什么样
for(int j=0;j<arr.length-1-i;j++){
if(arr[j]>=arr[j+1]){
int t = arr[j];
arr[j] = arr[j+1];
arr[j+1] = t;
}
}
}
}
//简单选择排序
public static void simpleSort(int[] arr){
for(int i=0;i<arr.length;i++){
out(arr);
int dest = i;
for(int j=i+1;j<arr.length;j++){
if(arr[j]<arr[dest]){
dest=j;
}
}
if(i!=dest){
int t = arr[i];
arr[i]=arr[dest];
arr[dest]=t;
}
}
}
//
public static void quickSort(int[] arr){
for(int i=0;i<arr.length;i++){
out(arr);
for(int j=i+1;j<arr.length;j++){
if(arr[i]>=arr[j]){
int t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
}
}
}
//快速排序,二分法,采用挖坑填坑实现,据说最快
public static void binarySort(int[] arr,int start, int end){
if(start<end){
int i = start;
int j = end;
int t = arr[i];//约定第一个为基准,并挖一个坑
while (i<j){//从后往前直到找到一个比基准小的数
while(i<j&&t<arr[j]){
j--;
}
if(i<j){
arr[i] = arr[j];//填进坑里
i++;//有必要吗?删除掉后不影响运行
}
while(i<j&&arr[i]<t){
i++;
}
if(i<j){
arr[j] = arr[i];
j--;
}
}
arr[i]=t;
binarySort(arr, start, i-1);
binarySort(arr, i+1, end);
}
}
//插入排序
public static void insertSort(int[] arr) {//5,3,4,6,2
int i=0,j=0; //3,5,4,6,2 //3,4,5,6,2
for(i=1;i<arr.length;i++){ //i=1 //i=2 //i=4
if(arr[i]<arr[i-1]){ //arr1<arr0 //arr2<arr1 //arr4<arr3
int t = arr[i]; //t=arr1=3 //t=arr2=4 //t=arr4=2
for(j = i-1;j>=0&&arr[j]>t;j--){//j=0;arr0=5>3 //j=-1 //j=1;j>=0&&arr1>4 //j=0 //j=3;arr3>2 //j=2;arr2>2 //j=1;arr1>2 //j=0;arr0>2 //j=-1
arr[j+1]=arr[j]; //arr1=arr0=5 //arr2=arr1=5 //arr4=arr3=6 //arr3=arr2=5 //arr2=arr1=4 //arr1=arr0=3
out(arr);
} //3,4,5,6,6 //3,4,5,5,6 //3,4,4,5,6 //3,3,4,5,6
arr[j+1]=t; //arr0=3 //arr1=4 //arr0=2
}
}
}
//输出数组
public static void out(int[] arr){
System.out.print("{");
for(int i =0;i<arr.length;i++){
System.out.print(arr[i]);
if(i!=arr.length-1)
System.out.print(",");
}
System.out.println("}");
}
}
数组排序,二分法
最新推荐文章于 2023-02-03 16:23:48 发布