hq金水

愿你是阳光,明媚不忧伤~
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

循环经典--------冒泡排序,查找。

Posted on 2016-04-24 23:01  hq金水  阅读(1010)  评论(0编辑  收藏  举报

1、冒泡排序

将8个整数进行升序排列

22 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
3 22 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
4 4 22 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 10 10 10 10
11 11 11 22 22 22 22 22 22 22 22 12 12 12 12 12 12 12 12 12 12 12 10 10 10 11 11 11 11
55 55 55 55 55 55 55 55 55 55 55 55 33 33 33 33 33 33 10 10 10 10 12 12 12 12 12 12 12
66 66 66 66 66 66 33 33 33 33 33 33 55 10 10 10 10 10 33 33 33 33 33 33 33 33 33 33 33
33 33 33 33 33 33 66 10 10 10 10 10 10 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55
10 10 10 10 10 10 10 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
趟数 第1趟 第2趟 第3趟 第4趟 第5趟 第6趟 第7趟
次数 比7次 比6次 比5次 比4次 比3次 比2次 比1次
关系:   趟数:n-1,次数:n-i

 

 

 

 

 

 

 

 

 

 程序代码:

 static void Main(string[] args)
        {
            int[] a = new int[8] {22,3,4,11,55,66,33,10 };
            //升序排列
            for(int i=1;i<=a.Length;i++)
            {
                for (int j=0;j<a.Length-i;j++)
                {if(a[j]>a[j+1])
                {
                    int t = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = t;
                }
                }
            }
            //输出数组a
            //for (int i = 0; i<8;i++ )
            //{
            //    Console.WriteLine(a[i]);
            //}
            foreach(int b in a)
            {
                Console.WriteLine(b);
            }
        }

 

2、顺序查找

注意:

体会布尔型 bool meizhaodao=true;在本题中的作用;

体会break的作用;

 程序代码:

 static void Main324234(string[] args)
        {//输入要找的数
            Console.WriteLine("请输入你要找的数:");
            int find = Convert.ToInt32(Console.ReadLine());
            int[] a = new int[]{ 2, 11, 55, 77, 4, 3, 2, 6 };
          //查找
            bool meizhaodao = true;//如果不加,没法输出“找不到”这句话
            for (int i = 0;i<=7;i++)
            {if(a[i]==find)
            {
                meizhaodao =false;
                Console.WriteLine("找到了,是第{0}个数。",i+1);
                break; //如果不加,数组含有2个find,可能输出2个找到了。
            } 
            }
            if(meizhaodao==true)
            {
                Console.WriteLine("没找到");
            }
        }

3、二分法查找------找英语单词

思路:

首先将要排序的数组或集合排序(冒泡排序法)

然后查找中间数,看看中间数==find?如果相等,输出找到了,并且终止循环;---循环体

如果find>中间数,去掉前面的一半,继续用二分法在后面一半数里面找;----循环体

如果find<中间数,去掉后面的一半,继续用二分法在前面的一半里头找;----循环体

重复循环,直到结束下标<开始下标时,输出没有找到,并终止循环。

 

进一步分析:写出本题的循环体和循环条件需要有一个开始下标、中间下标、结束下标。

程序代码:

 static void Main67778(string[] args)
        { //输入你要找的数
            Console.WriteLine("请输入你要找的数:");
            int find=Convert.ToInt32( Console.ReadLine());
            int[] a = new int[]{11,22,33,44,55,66,77,88,99};
            //查找
            int kaishi= 0, jieshu =a.Length-1;
            for (; ; )
            {
                int mid = (kaishi + jieshu) / 2;
                if(find==a[mid])
                {
                    Console.WriteLine("找到了,是第{1}个数",mid+1);
                    break;
                }
                else if (find >a[mid])
                {
                    kaishi = mid + 1;
                }
                else
                {
                    jieshu = mid - 1;
                }
                if(kaishi>jieshu)
                {
                    Console.WriteLine("没找到");
                    break;
                }
            }
        }