java常用排序算法

冒泡排序算法:

public static void bubbSort(int[] a){
		 for (int j = 0; j < a.length; j++){
	          for (int i = 0; i < a.length - j - 1; i++) {
			       if (a[i] > a[i + 1]){
			           int temp = a[i + 1];
			           a[i + 1] = a[i];
			           a[i] = temp;
			       }
	          }
		 }
	}
算法思想:由数组头部开始,每次比较两个元素,顺序不满足就进行交换,当前数组最大值(最小值)会被放在最后。一趟排序完成,然后同样的方法进行后面的比较。

插入排序算法:

public static void insSort(int[] a) {
        // 插入排序
        for (int i = 0; i < a.length; i++) {
            int k = i;
            // 找出最小值的坐标
            for (int j = i + 1; j < a.length; j++) {
                if (a[j] < a[k]) {
                    k = j;
                }
            }
            //最小的放到开始位置
            if (k > i) {
                a[i]=(a[k]^=(a[i]^=a[k]))^a[i];//使用异或交换,不需要中间变量,进行两个变量的数值交换
            }
        }
        //打印排好序的数组
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i] + " ");
        }
    }

算法思想:选取第一个数为基准数,让标记指向它的坐标值,然后与后面剩余的数进行比较,如果遇见比基准数小的,与其值进行交换,把标记指向新的基准数的坐标,以此类推,走完一次比较之后,最小的数找到了,然后再使用同样的方法找第二小的数,最终完成排序。


快速排序算法:

  

  public static int[] quickSort(int[] a,int low,int high){
        int start = low;
        int end = high;
        int key = a[low];               
        /***
         * 进行一次比较,关键值左右两部分,一部分比它小,一部分比它大
         */
        while( end > start ){
            //从后往前比较
            while( end > start && a[end] >= key){//查找比关键值小的,如果沒有就比较下一个
                end--;
            }  
            if( a[end] <= key){  //直到有比关键值小的交换位置
                a[start]=(a[end]^=(a[start]^=a[end]))^a[start];
            }
            //从前往后比较
            while( end> start && a[start] <= key){//查找比关键值大的,如果沒有就比较下一个
               start++;
            }
            if(a[start]>=key){ //直到有比关键值大的交换位置
                a[start]=(a[end]^=(a[start]^=a[end]))^a[start];             
            }
        }
        /**
         * 对左右两部分分别进行递归
         */
        if(start>low){        
            quickSort(a,low,start-1);
        }          
        if(end<high){            
            quickSort(a,end+1,high);
        }
       return a;
    }

算法思想:找一个基准值,一般以第一个数为基准值,从后往前比较,用基准值和最后一个值比较,找比基准值小的,如果找到交换位置,否则继续比较下一个。直到找到这个值,又从前往后开始比较,如果找到比基准值大的,交换位置,否则继续比较下一个,直到找到比基准值大的值才交换。最后到从前往后的比较索引大于等于从后往前比较的索引,结束第一次循环。基准值两边,一部分全小于它,一部分全大于它,把这两部分用上面的方法进行递归,直到它是个有序数列结束。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值