数据结构——排序

1、有序数组二分查找

   首先设定判断要找的数据为key,判断其是否在 数组的中间即a.length/2的位置,即key=a[a.length/2] 如果在直接返回。如果不在则循环获取,重要的一点,中间元素的值为mid = start + (start + end)/2。 判断如果key在mid位置则 返回,如果key>a[mid] 则start=mid +1;反之则为end = mid -1; 核心代码如下:

//如果在有序数组的中间直接返回
        int mid=a.length/2;
        if (key==a[mid]) {
            return mid;
        }
        int start=0;
        int end=a.length-1;

        while (start <= end) {
            //每次定位中间位置
            mid = start+(end-start)/2;
            
            if(key == a[mid]){
                return mid;
            }else if(key > a[mid]){
                start = mid +1;
            }else{
                end = mid-1;
            }
        }
        return -1;

//递归查找

private static int binSearch(int[] a, int start,int end,int key){
        int mid = (end - start)/2 +start;
        if(a[mid] == key){
            return mid;
        }else if(start >= end){
            return -1;
        }else if(a[mid] > key ){
            return binSearch(a, start,mid -1,key);
        }else{
            return binSearch(a,mid + 1, end,key);
        }
    }

2、冒泡排序

     冒泡排序是简单排序里面效率最小的一种排序方式,假如有n个数据,外层循环n-1次。每次相比较n-i次,重点在于:如果a[j]>a[j+1],则缓存temp=a[j+1],交换a[j]和a[j+1],核心代码如下:

//外层循环控制排序趟数(n-1)趟
        for (int i = 0; i < a.length -1 ; i++) {
            for (int j = 0; j < a.length -1 -i; j++) {    //每一趟排序多少次n - i趟
                if(a[j]>a[j+1]){
                    long temp = a[j];
                    a[j] = a[j+1];
                    a[j+1] = temp;
                }
            }
        }

3、选择排序

     选择排序 效率比冒泡排序的效率高一些,主要思想是当前的数据记录为最小值min和接下来的数据做对比,如果接下来的数据比当前的小,则记录此数据为最小值,接着向下比较,每一次循环找到一个数据最小的值,交换。核心代码如下

//外层循环控制排序趟数(n-1)趟
        int in,out,min;
        for (out = 0; out < mElement ; out++) {
            min = out;
            for (in = out+1; in < mElement; in++) {    //从下一个数据开始
                if(a[in]<a[min]){
                    min = in;
                }
            }
            long temp = a[out];
            a[out] = a[min];
            a[min] = temp;
        }

4、插入排序

     定义一个临时存储的变量,将数据列表中第二个数据放入零时变量中,然后依次和它之前的数据比较,前一条数据如果大于等于temp的话移动,否则不移动。 定义一个临时变量为temp, 核心代码如下:

//插入排序 --将第二个数据放入零时变量中,往取出数据的当前位置往前移动, 比较大小,放入相应的位置
        int out,in;
        for (out = 1; out <mElement; out++) {
            long temp = a[out];
            in = out;   
            while( in >0 && a[in-1]>=temp){  //往前循环, 判断为:in不能越界, 前一条数据如果大于等于temp的话移动。 否则不移动
                a[in] = a[in-1];
                in--;
            }  //至此就移动结束
            a[in]=temp;
        }

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值