c#快速排序

快速排序是先将大的值和小的值分成2组再进行比较整合输出最后排序结果;

  var arry = new int[] { 5, 45, 63, 8, 52, 99, 34 }; //建立数组
        QuickSort(arry, 0, arry.Length - 1);
        foreach (var t in arry)
        {
            Response.Write(t+"\n");       //输出排序后的结果
        }
    /// <summary>
    /// 快速排序算法
    /// </summary>
    /// <param name="data">排序数组</param>
    /// <param name="leftpos">下限</param>
    /// <param name="rightpos">上限</param>
    static void QuickSort(IList<int> data, int leftpos, int rightpos)
    {
        while (true)
        {
            var middle = data[(rightpos + leftpos) / 2]; //中间值
            var i = leftpos;       //移动上下标
            var j = rightpos;
            do        //循环知道分割为2个序列
            {
                while (data[i] < middle && i < rightpos)   //扫描中值左边的序列
                    i++;
                while (data[j] > middle && j > leftpos)   //扫描中值右边的序列
                    j--;
                if (i > j) continue;   
                var temp = data[i];       //知道可交互的值交换数据
                data[i] = data[j];
                data[j] = temp;
                i++;
                j--;
            } while (i <= j);
            {
                if (j > leftpos)  //递归对比分割点元素都小的那个序列进行快速排序
                    QuickSort(data, leftpos, j);
                if (i < rightpos)
                {              //递归对比分割点元素都大的那个歌序列进行快速排序
                    QuickSort(data,i,rightpos);
                }
            }

            break;
        }
    }

 

posted @ 2015-11-01 23:57  objnet  阅读(165)  评论(0编辑  收藏  举报