数组排序的两种方法 还有快速遍历数组的折半法

冒泡排序

双重循环 第一重判断要循环几次

int temp =0;
 // 第一重循环判断循环次数,例如有十个元素    那么我只需要比较8  次  最后一次无需要比较 已经是最大的了   
for(int i=0;i<array.length-1;i++){
     //本来i<=array.length-1 这样就循环了10次(0~9)把数组遍历了,但是我们只需要比较8次 所以i<array.length-1
      // array.length 是逻辑序号 1~10 看存了几个length便等于几   物理序号是0~9
    
    //第二层循环是 比较两个数字 看那个比较大 交换位置
    for(int j=0;j<array.length-1-i;j++){
        //这里重点是需要减去  i   因为后面已经排好序了 只需要排好前面的序号就可以了  这里的—1是防止越界
        if(array[j]>array[j+1]){
            temp = array[j];
            array[j] = array[j+1];
            array[j+1] = temp ;
            
        }
    }
    
}

折半法 数组选择排序法

//选择排序法
        for(int i=0;i<N;i++){
            for (int j = i+1; j <N; j++) {   //默认第一个为最小值 去比较
               if (a[j]<a[i]){
                   int temp = a[j];
                   a[j] = a[i];
                   a[i]=temp;
               }
            }    // 里层循环走完 那么可以找到最小值放在第一个位置
        }   //外层循环  a[1] 和a[i+1] 去比较 找到第二小 放在第二个位置

         // 用折半法去遍历 是否存在

      while(number!=a[middle]){
            if (number>a[middle]){
                start =middle;
            }
            else if (number<a[middle]){
                end = middle;
            }
           count++;
           middle = (start+end)/2;
           if (count>N/2){   //判断是否已经全部找完
               break;
            }
      }

 

posted @ 2021-04-20 17:48  沉默的羔羊_nie  阅读(175)  评论(0)    收藏  举报