数组排序方法

归并排序

归并排序:
       定义一个新的数组,将原来的数组一分为二,将原来数组的前一段第一个元素和后一段第一个元素比较
       如果前一个哪个元素小,就把那个元素放在新数组里面,然后紧接着较大的元素和另一半的下一个元素
       继续比较,再选出一个小的放在新数组里面。但是前提是原来这个数组的两半是排好顺序的。
public class MyTest {
    public static void main(String[] args) {
        int[] arr={12,23,45,45,2,46,255,25,231,1564,13};    //
        System.out.println(Arrays.toString(a(arr)));
    }
    //构造一个方法,在里面创建一个新的数组。
    public static int[] sort(int[] arr){
        int[] newarr=new int[arr.length];
        b(arr,0,arr.length-1,newarr);
        return newarr;
    }
    /*
        将一个数组分成两半,前后两半都要是排好顺序的,就使用递归,让它的前一半排好顺序
        再让后一半排好顺序。
        步骤,先将数组一分为二,那么前一半的最后一个元素是原来数组的中间元素,后一半的第一个
        元素是原来数组的中间加一个元素,之后在将里面这些元素排好序就行。
     */
    public static void b(int[] arr,int start,int end,int[] newarr){
        if(start<end){
            int mid=(start+end)/2;
            b(arr,start,mid,newarr);
            b(arr,mid+1,end,newarr);
            c(arr,start,mid,end,newarr);
        }
    }
    /*
        构造一个方法:进行对数组的排序。
        排序方法:将原来的数组一分为二,将原来数组的前一段第一个元素和后一段第一个元素比较
            如果哪个元素小,就把那个元素放在新数组里面,然后紧接着较大的元素和另一半的
            下一个元素继续比较,再选出一个小的放在新数组里面。但是前提是原来这个数组的两半是排好顺序的。
     */
    public static void c(int[] arr,int start,int mid,int end,int[] newarr){
        int left=start;
        int right=mid+1;
        int i=0;
        while(left<=mid&&right<=end){
            if(arr[left]<arr[right]){
                newarr[i]=arr[left];
                i++;
                left++;
            }else{
                newarr[i]=arr[right];
                i++;
                right++;
            }
        }
        while(left<=mid){
            newarr[i]=arr[left];
            i++;
            left++;
        }
        while(right<=end){
            newarr[i]=arr[right];
            i++;
            right++;
        }
        //最后要将排好序的数组放到原来的数组里面,不然原来的数组不变化,排序也不变化
        int j=0;
        for (int f=start;f<=end;f++){
            arr[f]=newarr[j++];
        }
    }
}

冒泡排序

冒泡排序:
	将一个数组的元素的第一个元素后面元素比,如果比第二个元素大,就把第二个元素
	和第一个元素交换位置,然后再将此时的第二个元素和第三个元素比,如果大,就交
	换位置,如果小,就让第三个元素和第四个元素比较,依次比较,最大的元素肯定就
	在最后面,然后下一轮继续这样比较,将剩下元素最大的放在长度减一的位置,依次
	类推就排好了。
public class MaoPao {
    public static void main(String[] args) {
        int[] arr={12,23,45,45,2,46,255,25,231,1564,13};
        System.out.println(Arrays.toString(a(arr)));
    }
    public static int[] sort(int[] arr){
        for(int i=0;i<arr.length;i++){
            for(int j=0;j<arr.length-i-1;j++){
                if(arr[j]>=arr[j+1]){
                    int a=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=a;
                }
            }
        }
        return arr;
    }
}

选择排序

选择排序:
	把第一个元素和后面的元素进行比较,如果比后面的大,就交换位置,如果比后面的小,
	就不交换位置,一轮之后,最小就在第一个,接下来第二轮就开始是第二个元素和其他
	的比较,依次类推,就排好了。
public class XuanZe {
    public static void main(String[] args) {
        int[] arr={12,23,45,45,2,46,255,25,231,1564,13};
        System.out.println(Arrays.toString(sort(arr)));
    }
    public static int[] sort(int[] arr){
        for(int i=0;i<arr.length;i++){
            for(int j=i;j<arr.length;j++){
                if(arr[i]>arr[j]){
                    int a=arr[j];
                    arr[j]=arr[i];
                    arr[i]=a;
                }
            }
        }
        return arr;
    }
}

插入排序

插入排序:
	从第一个开始,先将前面的数组排好顺序,然后将下一个和前面已经排好顺序的元素比较,
	如果小于那个元素就插入进去。依次类推,就排好了。
public class ChaRu {
    public static void main(String[] args) {
        int[] arr={12,23,45,45,2,46,255,25,231,1564,13};
        System.out.println(Arrays.toString(sort(arr)));
    }
    public static int[] sort(int[] arr){
        for (int i=0;i<arr.length;i++){
            for(int j=i;j>0;j--){
                if(arr[j]<arr[j-1]){
                    int a=arr[j];
                    arr[j]=arr[j-1];
                    arr[j-1]=a;
                }
            }
        }
        return arr;
    }
}
posted @ 2021-05-18 16:22  Jack+_+  阅读(394)  评论(0)    收藏  举报