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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙亚雄 中级黑马   /  2012-8-16 15:17  /  3240 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

高手帮忙解释下有个代码注释就更好了,看百度还是有些迷糊 谢谢

评分

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

查看全部评分

3 个回复

倒序浏览
/*******************2012-08-15**************************/
/*******************In BeiJing***************************/
static void change(ref int left,ref int right)
{
       int temp;//临时变量;
       temp = left; //第一个值
       left = right;//第二个数的值赋给第一个数
       right = temp;//将第二个数的值赋给临时变量
}

static void CatchSorts(int[] intArray)//排序的数组
{
       int low,up,index;
       low = 0;//数组的开始索引
       up=intArray.Length - 1;//数组的结束索引
       while(up>low)
       {
            for(int i=low; i< up; i++)//从上到下扫描
             {
                 if(intArray[i+1]>intArray[i+1]))
                 {
                       change(ref intArray[i],ref intArray[i+1]);
                       index = i;//记录索引
                 }
             }
             up=index;
             for(int i=up;i>low;i--)//从下到上扫描
             {
                   if(intArray[i]<intArray[i-1])
                   {
                         change(ref intArray[i], ref intArray[i-1]);
                         index = i;
                   }
               }
                low = index;
        }
}

static void sort(int[] intArray)//定义一个需要排序的一维数组
{
       intArray = intAry;
       CatchSorts(intArray);//采用鸡尾酒经典算法排序
}

static void Main(string[] args)
{
      int[] ary = new int[] { 12,43,1,432,76,3};//手段定义一个数组,并赋值
  sort(ary);//排序
  for(int i=0;i<ary.Length;i++)
      {
            Console.WriteLine(ary[i]+"");//逐一输出
  }
      Console.ReadLine();
}
回复 使用道具 举报
本帖最后由 黑马杨凯 于 2012-8-16 17:18 编辑

        static void Main(string[] args)
        {
            int[] nums = new int[20];
            Random r = new Random();
            Console.WriteLine("原始数据:");
            for (int i = 0; i < nums.Length; i++)
            {
                nums = r.Next(100);
                Console.Write(nums + " ");
            }
            Console.WriteLine();


            int temp=0;//交换用空间
            int low = 0;//low负责更改正向冒泡的起点位置(也是反向冒泡的终点)
            int high = nums.Length-1;//high负责反向冒泡的起点位置(也是正向冒泡的终点)、
            bool isChanged = true;//记录是否发生了交换,如果没交换就为false,发生了交换设置为true,
                                  //作为判断提前完成排序任务情况的标记,以便及时终止程序

            //开始鸡尾酒排序
         while (true)
            {
                isChanged = false;//恢复标志位

                //先进行正向冒泡,大值到右边
                for (int i = low; i < high; i++)
                {
                    if (nums > nums[i + 1])
                    {
                        //nums大于nums[i+1],就交换位置,大的向后
                        temp = nums;
                        nums = nums[i + 1];
                        nums[i + 1] = temp;
                        isChanged = true;//发生交换就将标志置为true
                    }
                }
                //正向冒泡完成一轮,最后一个数据确定了,终点前移
                high--;

                if (isChanged == false)//判断是否进行了交换
                {
                    break;//不交换了就跳出循环
                }

                isChanged = false;//恢复标志位

                //然后再反向进行冒泡,小值到左边
                for (int j = high; j > low; j--)
                {
                    if (nums[j] < nums[j - 1])
                    {
                        //nums[j]小于nums[j-1],就交换位置,小的向左
                        temp = nums[j];
                        nums[j] = nums[j - 1];
                        nums[j - 1] = temp;
                        isChanged = true;
                    }
                }

                if (isChanged == false)
                {
                    break;//不交换了就跳出循环
                }
                //反向冒泡一轮结束,起始点向后移
                low++;
            }


            Console.WriteLine("最终结果:");
            for (int i = 0; i < nums.Length; i++)
            {
                Console.Write(nums+" ");
            }
            Console.WriteLine();

            Console.ReadKey();
        }

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

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