A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

Dangerous

初级黑马

  • 黑马币:0

  • 帖子:6

  • 精华:0

© Dangerous 初级黑马   /  2013-3-4 23:43  /  1739 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

            //定义一个数组
            int[] numbers = { 1, 36, 5, 6, 618, 8, 9, 3, 34, 33, 4 };
            //冒泡排序口诀:forfor,外层长度-1,内层长度-1-i
            for (int i = 0; i < numbers.Length - 1; i++)
            {
                for (int j = 0; j < numbers.Length - 1 - i; j++)
                {
                    if (numbers[j] > numbers[j + 1])
                    {
                        //交换变量
               int temp = numbers[j];
                        numbers[j] = numbers[j + 1];
                        numbers[j + 1] = temp;
                    }
                }
            }
           
           //遍历数组
            foreach (var item in numbers)
            {
                Console.WriteLine(item);
            }

  

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

5 个回复

倒序浏览
{:soso_e130:}好好学习>..
回复 使用道具 举报
就这个没看懂呢
回复 使用道具 举报
给你个升级版吧冒泡2.0版
static void Main(string[] args)
        {
            bool isExchanged = false;
            int temp;//定义一个中间变量
            int[] arr = new int[] { 1,3, 9, 27, 4, 8, 32, 11,4 };//定义一个数组,并赋值
            Console.WriteLine("排序前:");
            foreach (int m in arr)
            {
                Console.Write(m + " ");//循环遍历数组输出其中元素
            }
            Console.WriteLine();


            for (int i = arr.Length - 1; i >= 0; i--)
            {//从后往前找
                isExchanged = false;
                for (int j = i - 1; j >= 0; j--)
                {
                    if (arr[i] < arr[j])
                    {//如果后面的值小于前面的值,则交换位置
                        temp = arr[j];
                        arr[j] = arr[i];
                        arr[i] = temp;
                        isExchanged = true;
                    }
                }
                if (!isExchanged)//一遍比较过后如果没有进行交换则退出循环
                    break;
            }
            Console.WriteLine("从小到大排序后:");
            foreach (int n in arr)//循环遍历排序后的数组元素并输出
                Console.Write(n + " ");
            Console.ReadKey();
        }

评分

参与人数 1技术分 +1 收起 理由
彭清贵 + 1

查看全部评分

回复 使用道具 举报
金阳兄的冒泡V2.0棒棒的啊!
优化的相当好- -谢谢你!!
每次逛论坛都有新发现{:soso_e102:}
金阳兄的思路是:
比如我是1 3 2 4 5 6这样的数组,用两个for循环,会浪费好几次循环在那里做无用功,它只用循环一次就足够排序完成了。
所以金阳兄引入一个简单的isExchanged直接检测如果这一遍比较一次交换都没有进行的话,那么isExchanged的值就还是false,那么就可以判断数组已经排序完成了,可以跳出循环,不必再继续接下来的循环了。

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
再发个冒泡2.1 原理一样 但感觉比2.0好
            //int[] list = { 1, 0, 6, 7, 5, 9, 2, 8, 4, 3 };
            //Console.Write("排序前:");
            //// 遍历数组输出所有元素
            //for (int i = 0; i < list.Length; i++)
            //    Console.Write(list[i]);
            //Console.WriteLine();
            //int tmp = 0; // 用于交换变量
            //bool isOK = false; // 表示是否还需要排序
            //while (!isOK)
            //{
            //    isOK = true;
            //    for (int i = 0; i < list.Length - 1; i++)
            //    {
            //        // 如果下一个元素大于这个元素
            //        if (list[i] > list[i + 1])
            //        {
            //            // 交换两者
            //            tmp = list[i];
            //            list[i] = list[i + 1];
            //            list[i + 1] = tmp;
            //            // 进行了一次交换表明还需要再次排序
            //            isOK = false;
            //        }
            //    }
            //}
            //Console.Write("排序后:");
            //for (int i = 0; i < list.Length; i++)
            //    Console.Write(list[i]);
            //Console.WriteLine();

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马