6.数组反转,数组排序 (冒泡,二分查找,查重数组)

1.冒泡排序

  • 冒第一个泡,写一个循环,让数组中的最大值出现在数组的最后一个位置
    冒第二个泡,写一个循环,让数组中的第二大值出现在数组的最倒数第二个位置
    ...
    两两对比,大值放在后面!5个数数据,冒最大的泡,需要对比多少次?4次,所以循环4次就可以出结果了
 public class demo1 {
    public static void main(String[] args) {
         int[] arr = {99,8,3,87,12};
        // 外层循环用来控制需要循环多少次
        //最后一个不用动,所以只需要循环数组长度减1次  就可以完成
        //内层循环用来操作一个一个的交换位置(俗称冒泡)
         for(int i = 0;i<arr.length-1;i++){  
            
             // 99先和3对比,99大,所以代替3的位置,继续和8对比,他只需要对比arr.length-1次
              //(写0是为了看出规律)
             //  用循环的话就是
             // for(int j=0;j<arr.length-1-0;j++){
             //    if(arr[j]>arr[j+1]){
             //       int temp = arr[j]   用临时变量,交换他俩位置
             //       arr[j] = arr[j+1]
             //         arr[j+1] = temp
             //    }
             // }  结果是  {8,3,87,12,10,56,65,99};
             
             //再来一次   8先和3对比,8大,所以代替3的位置,继续和87对比,
            //但是不需要对比最后一个,因为已经对比过了上一轮,所以就是去掉数组的最 
             //后一位arr.length-1-1
             //  用循环的话就是
             // for(int j=0;j<arr.length-1-1;j++){
             //    if(arr[j]>arr[j+1]){
             //       int temp = arr[j]   用临时变量,交换他俩位置
             //       arr[j] = arr[j+1]
             //         arr[j+1] = temp
             //    }
             // }
            // 所以  外面的循环控制需要几次,里面的进行一个一个的对比。
             
             for(int j= 0;j<arr.length-1-i;j++){
                 if(arr[j]>arr[j+1]){
                     int temp = arr[j];
                     arr[j] = arr[j+1];
                     arr[j+1] = temp;
                 }
             }
         }
 ///  最后结果的打印:
         for (int i= 0;i<arr.length;i++){
             System.out.println(arr[i]);
         }
    }
}

2. 数组查找 -- 二分查找

  • 对数组有个要求,必须是有序的。
public class erfen {
    public static void main(String[] args) {
         int[] arr = {1,3,5,7,8,9,10};
         int num = 10;
         int left = 0;
         int right = arr.length-1;
         int mid = (left+right)/2;  //先从中间开始猜
         int index = -1;
         while(left<=right){ //循环多少次不知道,猜的区间一直在缩小,不能让左边比右边还大
             if(num == arr[mid]){  // 如果正好,num == arr[mid]  直接结束循环;
                 index = mid;
                 break;
             }
             if(num>arr[mid]){
                 left = mid+1; //直接从中间往上猜
             }
             if(num<arr[mid]){
                 right = mid-1;  // 直接从中间往下猜
             }
            mid = (left+right)/2;   // 重新计算下,从新的区间的中间开始猜。
         }
        System.out.println(index);


    }
}

3.简单选择排序

  • 思想
  • 找到数组中的最大值,放在最后一个位置
  • 找到数组中第二大的值,放在倒数第二个位置
public  class jdxz{
    public static void main(String[] args){
        int[] arr = {4,3,67,23,5,99};
        //  想让这个值为数组第一项

        //    第一步  :先找到最大值  int max = 67;   int index = 2;  把他放到最后。
        // 所以循环就可以从第一位开始对比了
        // (就是max 先和index =1的对比,一直到最后,谁大,就把它赋值给max)。
//        for(int i = 1;i<arr.length-1;i++){
//            if(arr[i]>max){
//                index = i;
//                max = arr[i];
//            }
//        }
        // 如果index 正好是最后一位,就没必要交换了
//        if(index!=arr.length-1){
//            int temp = arr[index];
//            arr[index] = arr[arr.length-1];
//            arr[arr.length-1] = temp;
//        }
       for (int j=0; j<arr.length-1;j++){
           int max = arr[0];
           int index = 0;
           for(int i = 1;i<arr.length-j;i++){
               if(arr[i]>max){
                   index = i;
                   max = arr[i];
               }
           }
           // 如果index 正好是最后一位,就没必要交换了
           if(index!=arr.length-1-j){
               int temp = arr[index];
               arr[index] = arr[arr.length-1-j];
               arr[arr.length-1-j] = temp;
           }

       }
        for (int i=0;i<arr.length;i++){
            System.out.println(arr[i]);
        }
    }
}

4.数组里重复的有几个

public class Test1 {
    public static void main(String[] args) {
        //这个题目是有难度的,日测已经简单很多天了!拔高的题目
        char[] arrs={'a','c','a','a','b'};
        char[] arrs1=new char[arrs.length];
        int[] nums=new int[arrs.length];
        int count=0;//记录字符的种类数据
        for(int i=0;i<arrs.length;i++){
            //1. 取到arrs中的一个字符(从数组中取出来的一个字符)
            char c=arrs[i];
            //2. 去arrs1中进行判断,是否存在的判断
            int index=-1;
            for(int j=0;j<count;j++){
                if(c==arrs1[j]){
                    //如果进入到if说明找到相同的了,说明之前添加过该字符
                    index=j;
                }
            }
            //3. 根据index的值判断之前是否出现过该字符(c)
            if(index==-1){
                //说明该字符就是第一次出现
                arrs1[count]=c;
                nums[count]=1;
                count++;
            }else{
                //说明该字符不是第一次出现
                nums[index]=nums[index]+1;
            }
        }

        //查看结果
        for (int i = 0; i < count; i++) {
            System.out.println(arrs1[i]+"-----"+nums[i]);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,504评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,434评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,089评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,378评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,472评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,506评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,519评论 3 413
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,292评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,738评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,022评论 2 329
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,194评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,873评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,536评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,162评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,413评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,075评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,080评论 2 352

推荐阅读更多精彩内容