有关冒泡排序法的问题

 1. 写出一条Sql语句: 取出表A中第31到第40记录(SQLServer, 以自动增长的ID作为主键, 注意:ID可能不是连续的。)

解1: select top 10 * from A where id not in (select top 30 id from A)
解2: select top 10 * from A where id > (select max(id) from (select top 30 id from A )as A)


2. 有一组数字:20 , 10 ,8, 30, 5, 1, 2, 22 请用编程的方式冒泡排序法进行由小到大的方式排序。
从小到大的排序
class Program
    {
        public static void Sort(int[] myArray)

        {

        // 取长度最长的词组 -- 冒泡法
        for (int j = 1; j < myArray.Length;j++)
        {
            for (int i = 0; i < myArray.Length - 1; i++)
            {
                 // 如果 myArray[i] > myArray[i+1] ,则 myArray[i] 上浮一位
                if (myArray[i] >myArray[i + 1])
                {

                   int temp = myArray[i];
                    myArray[i] = myArray[i + 1];
                    myArray[i + 1] = temp;
                }

            }
        }
        }
       static void Main(string[] args)
       {
            int[] myArray = new int[] { 20 , 10 ,8, 30, 5, 1, 2, 22};
            Sort(myArray);
           for (int m = 0; m < myArray.Length; m++)
            {
                Console.WriteLine(myArray[m]);
            }
        }

从大到小的排序

class Program
   {
        public static void Sort(int[] myArray)
        {
       // 取长度最长的词组 -- 冒泡法
        for (int j = 1; j < myArray.Length;j++)
        {
            for (int i = 0; i < myArray.Length - 1; i++)
           {
                 // 如果 myArray[i] < myArray[i+1] ,则 myArray[i] 下沉一位
               if (myArray[i] < myArray[i + 1])
                {
                   int temp = myArray[i];
                   myArray[i] = myArray[i + 1];
                    myArray[i + 1] = temp;
                }

           }
       }
       }
        static void Main(string[] args)
        {
            int[] myArray = new int[] { 20 , 10 ,8, 30, 5, 1, 2, 22 };
           Sort(myArray);
           for (int m = 0; m < myArray.Length; m++)
          {
                Console.WriteLine(myArray[m]);
            }
       }

3. 一列数的规则如下: 1、1、2、3、5、8、13、21、34......
求第30位数是多少, 用递归算法实现。
public class MainClass
    {
        public static void Main()
        {
            Console.WriteLine(Foo(30));
        }
        public static int Foo(int i)
        {
            if (i <= 0)
                return 0;
            else if(i > 0 && i <= 2)
                return 1;
            else return Foo(i -1) + Foo(i - 2);
        }
    }



4. 程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。(C#语言)

要求: 1.要有联动性,老鼠和主人的行为是被动的。

2.考虑可扩展性,猫的叫声可能引起其他联动效应。

答:
要点:1. 联动效果,运行代码只要执行Cat.Cryed()方法。2. 对老鼠和主人进行抽象
    public interface Observer
    {
       void Response();    //观察者的响应,如是老鼠见到猫的反映
  }
    public interface Subject
    {
        void AimAt(Observer obs); //针对哪些观察者,这里指猫的要扑捉的对象---老鼠
    }
    public class Mouse : Observer
    {
        private string name;
        public Mouse(string name, Subject subj)
        {
          this.name = name;
           subj.AimAt(this);
       }
        public void Response()
        {
            Console.WriteLine(name + " attempt to escape!");
        }
    }
    public class Master : Observer
   {
        public Master(Subject subj)
        {
            subj.AimAt(this);
        }
        public void Response()
        {
           Console.WriteLine("Host waken!");
       }
   }
  public class Cat : Subject
  {
      private ArrayList observers;
       public Cat()
        {
           this.observers = new ArrayList();
        }
        public void AimAt(Observer obs)
       {
            this.observers.Add(obs);
        }
        public void Cry()
        {
            Console.WriteLine("Cat cryed!");
            foreach (Observer obs in this.observers)
           {
                obs.Response();

            }
       }
   }
    class MainClass
    {
        static void Main(string[] args)
        {
            Cat cat = new Cat();
            Mouse mouse1 = new Mouse("mouse1", cat);
           Mouse mouse2 = new Mouse("mouse2", cat);
            Master master = new Master(cat);
            cat.Cry();
        }
    }

posted on 2013-08-16 18:54  bbsno  阅读(192)  评论(0编辑  收藏  举报

导航