简单排序算法(三)

快速排序是一种交换排序,使用分治法减小问题规模,再分别进行处理。另外快速排序一般是使用递归实现,如果待排序列规模较小,其效果不如简单插入排序。

简要原理:首先确定主元(基准),一头一尾两个数同时开始和主元比较,左边的数和主元比较,如果小就加一,如果大就停止。然后右边的数也一样,大就减一,否则停止,如果这两个数没有错位,则两数交换位置,重复这样的遍历过程直至错位,这就完成了一次划分。最后对这两部分分别又使用同样的方法进行快排,得到序列。

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

namespace 排序
{
    class Program
    {
        /// <summary>
        /// 简化接口
        /// </summary>
        /// <param name="arr"></param>
        public static void QuickSort(int[] A)
        {
            Quick_Sort(A, 0, A.Length - 1);           
        }

        /// <summary>
        /// 交换两个数
        /// </summary>
        /// <param name="arr"></param>
        /// <param name="i"></param>
        /// <param name="j"></param>
        private static void swap(int[] arr, int i, int j)
        {
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }

        /// <summary>
        /// 快速排序
        /// </summary>
        /// <param name="A"></param>
        /// <param name="N"></param>
        private static void Quick_Sort(int[] arr, int left, int right)
        {
            if (left < right)
            {
                int povit = arr[(left + right) / 2];
                int low = left - 1;
                int high = right + 1;
                while (true)
                {
                    while (arr[++low] < povit) ;
                    while (arr[--high] > povit) ;
                    if (low >= high) break;
                    swap(arr, low, high);
                }
                Quick_Sort(arr, left, low - 1);
                Quick_Sort(arr, high + 1, right);
            }           
        }

        static void Main(string[] args)
        {
            string[] str = Console.ReadLine().Split('-');
            int[] array = new int[str.Length];
            for (int k = 0; k < str.Length; k++)
            {
                array[k] = Convert.ToInt32(str[k]);
            }
            QuickSort(array);
            for (int a = 0; a < array.Length; a++)
            {
                Console.WriteLine(array[a]);
            }
            Console.ReadLine();
        }
    }
}




排序效果图如下:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值