java排序

import java.util.Arrays;

public class Test {
    // 选择排序:找到当前基地pos,然后和与后面数据做比较,如果后面数据小于基地数据pos,
    // 交换,最后比较i=pos是否再同一个位置,不同交换,两次for循环 需要交换
   public static void selectSort(int[] nums){
       if (nums==null||nums.length==0){
           return;
       }

       for (int i=0;i<nums.length;i++){
           int pos=i;
           //j必须等于1+1!!
           for (int j=i+1;j<nums.length;j++){
               if(nums[j]<nums[pos]){
                pos=j;
               }
           }
           if (i!=pos){
               int temp=nums[i];
                nums[i]=nums[pos];
                nums[pos]=temp;
           }
       }

    }
    //插入排序,将当前数据的下一个数据做为插入数据insert,比较后面一条数据和插入数据大小,
    // 如果大于插入数据,将后面这个数据前移,并且以此比较(j--),最后将插入数据赋给j+1
    //一次for选择一次while
    private static void insertSort(int[] nums){
        if (nums==null||nums.length==0){
            return;
        }
        for (int i=0;i<nums.length;i++){
            int insert=nums[i];
            int j=i-1;
            while (j>=0&&nums[j]>insert){
             nums[j+1]=nums[j];
             j--;
            }
            nums[j+1]=insert;
        }
    }

    //快速排序 需要递归,先比较开始数据和结束数据,找到基地数据pivot;先和左边比较如果左边数据小于基地数据右移,
    // 然后右边比较,如果右边数据比基地数据大,左移,然后再交换,再递归,三个while
    private static void quickSort(int[] nums){
       sort(nums,0,nums.length-1);
    }

    private static void sort(int[] nums,int start,int end){
       if (start>=end){
           return;
       }
       int pivot=nums[start];
       int left=start;
       int right=end;
       while (left<=right){
           while ((left<=right&&nums[left]<pivot)){
               left++;
           }
           while ((left<=right&&nums[right]>pivot)){
               right--;
           }
           if (left<=right){
               int temp=nums[right];
               nums[right]=nums[left];
               nums[left]=temp;
               left++;
               right--;
           }
       }
       sort(nums,start,right);
       sort(nums,left,end);

    }

// 冒泡排序 每次和自己前一个数据比较,后面数据小交换,有几个数据循环遍历几次
    public static void doubleSort(int [] nums){
       if (nums==null||nums.length==0)
       {return;
       }
       for (int i=0;i<nums.length;i++){
           for (int j=1;j<nums.length;j++){
               //和自己上个数据比较
               if (nums[j-1]>nums[j]){
                   int temp = nums[j];
                   nums[j]=nums[j-1];
                   nums[j-1]=temp;
               }
           }
       }
    }
    public static void main(String[] args) {
        int[] nums={2,5,3,8,6};
        selectSort(nums);
        System.out.println(Arrays.toString(nums));
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值