码迷,mamicode.com
首页 > 编程语言 > 详细

快速排序(拔萝卜法,实质就是一直否定寻找数当前的位置,一个萝卜,一个坑)

时间:2015-12-13 17:18:42      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace QuickSort
{
    class Program
    {
        static void Main(string[] args)
        {
            List<int> list = new List<int>() { 33, 19, 28, 14, 10, 67, 22, 90, 55, 100, 120, 140, 1, 12 };
            int low = 0;
            int high = list.Count - 1;
            int mid = (low + high) / 2;
            QuickSortArr(list,low,high);
            Console.ReadKey();
        }
        public static void  QuickSortArr(List<int> list,int low,int high)
        {
            //用来结束递归调用
            if (low >= high)
            {
                return;

            }
            int start = low;
            int end = high;

            int mid = (low + high) / 2;
 
            int findNum = list[mid];
            //tag=0是初始化 tag用来标示要定位的数字的可能的位置
            int tag = 0;
            tag = mid;
            while (low<high)
            {
                while (low < high)
                {
                    if (findNum > list[high])
                    {
                        //寻找的数字的可能的位置每次都在变化,不管是后面找小的还是前面找大的tag=high(定位可能的位置,tag=high是在更新可能的位置)
                        list[tag] = list[high];
                        tag = high;
                        break;
                    }
                    else
                    {
                        high--;
                    }

                }
                while (low < high)
                {
                    if (findNum < list[low])
                    {
                        //寻找的数字的可能的位置每次都在变化,不管是后面找小的还是前面找大的tag=low(定位可能的位置,tag=low是在更新可能的位置)
                        list[tag] = list[low];
                        tag = low;
                        break;
                    }
                    else
                    {
                        low++;
                    }
                }

            }
            //low==high的时候说明前面都是比被寻找数小的,后面都是比被寻找数大的,说以low==high的下标就是最终数的下标
            list[low] =findNum;
         
            QuickSortArr(list, start,low-1);
            QuickSortArr(list, low+1, end);
          
           
        }
    }
}

快速排序(拔萝卜法,实质就是一直否定寻找数当前的位置,一个萝卜,一个坑)

标签:

原文地址:http://www.cnblogs.com/kexb/p/5042975.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!