交换排序-冒泡排序和快速排序

1.冒泡排序

两个循环是关键

  第一个是冒泡执行的趟数,规则是N个数字,执行N-1趟排序

  第二个是从后向前一次比较的循环

  算法实现如下:

        //冒泡排序算法
        static List<int> BubbleSort(List<int> list)
        {
            int temp;
            //第一层循环: 表明要比较的次数,比如list.count个数,肯定要比较count-1次
            for (int i = 0; i < list.Count - 1; i++)
            {
                //第二层循环:从后向前依次进行两两比较
                for (int j = list.Count - 1; j > i; j--)
                {
                    //如果前面一个数大于后面一个数则交换
                    if (list[j - 1] > list[j])
                    {
                        temp = list[j - 1];
                        list[j - 1] = list[j];
                        list[j] = temp;
                    }
                }
            }
            return list;
        }

2.快速排序

设计算法中分治和递归

具体怎么算的看下面

http://developer.51cto.com/art/201403/430986.htm

算法实现如下:

static void MyQuickSort(int left,int right,int[] a)
        {
            int i, j, t, temp;
            if (left > right)
                return;

            temp = a[left]; //temp中存的就是基准数 
            i = left;
            j = right;
            while (i != j)
            {
                //顺序很重要,要先从右边开始找 
                while (a[j] >= temp && i < j)
                    j--;
                //再找右边的 
                while (a[i] <= temp && i < j)
                    i++;
                //交换两个数在数组中的位置 
                if (i < j)
                {
                    t = a[i];
                    a[i] = a[j];
                    a[j] = t;
                }
            }
            //最终将基准数归位 
            a[left] = a[i];
            a[i] = temp;

            MyQuickSort(left, i - 1,a);//继续处理左边的,这里是一个递归的过程 
            MyQuickSort(i + 1, right,a);//继续处理右边的 ,这里是一个递归的过程 
    
        }

 

posted @ 2016-03-14 16:56  奋斗的大橙子  阅读(202)  评论(0编辑  收藏  举报