6大排序

1.冒泡排序
算法描述:
比较相邻的元素,如果前一个比后一个大,交换之。
第一趟排序第1个和第2个一对,比较与交换,随后第2个和第3个一对比较交换,这样直到倒数第2个和最后1个,将最大的数移动到最后一位。
第二趟将第二大的数移动至倒数第二位
......
因此需要n-1趟;

public static void main(String[] args) {
       int[] nums={6,5,4,3,2,1};
       sort(nums);
       for (int i = 0; i < nums.length; i++) {
           System.out.println(nums[i]);
       }
   }
   public static void sort(int[] nums){
       //一定要记住最外层的循环为趟数
       for(int i=0;inums[j+1]){
                   int temp=nums[j];
                   nums[j]=nums[j+1];
                   nums[j+1]=temp;
               }
           }
       }
   }

2.选择排序

public static void main(String[] args) {
       int[] nums={6,5,4,3,2,1};
       sort(nums);
       for (int i = 0; i < nums.length; i++) {
           System.out.println(nums[i]);
       }
   }
   public static void sort(int[] nums){
       for(int i=0;i

3.插入排序

public static void main(String[] args) {
     int[] nums={6,5,4,3,2,1};
     sort(nums);
     for (int i = 0; i < nums.length; i++) {
         System.out.println(nums[i]);
     }
 }
 public static void sort(int[] nums){
     //外层for为趟数
     for (int i = 0; i 0;j--){
             //比较替换
             if(nums[j]

4.希尔排序

 public static void main(String[] args) {
        int[] nums={6,5,4,3,2,1};
        sort(nums);
        for (int i = 0; i < nums.length; i++) {
            System.out.println(nums[i]);
        }
    }
    public static void sort(int[] nums){
        //根据数组的长度确定增长量h的值
        int h=1;
        while(h0){
            //排序
            //找待插入的元素
            for(int i=h;i=h;j=j-h){
                    //比较
                    if(nums[j]

5.归并排序

 public static void main(String[] args) {
        int[] a = { 49, 38, 65, 97, 76, 13, 27, 50 };
        mergerSort(a, 0, a.length-1);
        System.out.println("排好序的数组:");
        for (int e : a)
            System.out.print(e+" ");

    }
    public static void mergerSort(int[] a,int start,int end){
        if(start

6.快速排序

 public static void main(String[] args) {
        int[] nums={6,5,4,3,2,1};
        sort(nums,0,nums.length-1);
        for (int i = 0; i < nums.length; i++) {
            System.out.println(nums[i]);
        }
    }
    public static void sort(int[] nums,int left,int right){
        if(left>right){
            return ;
        }
        // temp中存放基准数
        int i=left,j=right;
        int temp=nums[left];
        while(i!=j){
            // 顺序很重要,先从右边开始往左找,直到找到比base值小的数
             while(j>i && nums[j]>=temp){
                 j--;
             }
            // 再从左往右边找,直到找到比base值大的数
             while(j>i && nums[i]<=temp){
                 i++;
             }
            // 上面的循环结束表示找到了位置或者(i>=j)了,交换两个数在数组中的位置
             if(i

你可能感兴趣的:(6大排序)