• 快速排序


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Sort
    {
        class QSort
        {
            static public void Sort1(int[] arr, int beg, int end)
            {
                if (end - beg < 1)
                    return;
    
                if(end == beg+1)
                {
                    if (arr[beg] > arr[end])
                        lib.Swap<int>(arr, beg, end);
                    return;
                }
    
                int current = beg+1;
                int midVal = arr[beg];
    
                for(int i = beg+1; i<=end; i++)
                {
                    if(arr[i] < midVal)
                    {
                        lib.Swap<int>(arr, i, current);
                        current++;
                    }
                }
                lib.Swap<int>(arr, beg, current-1);
    
                Sort1(arr, beg, current - 2);
                Sort1(arr, current, end);
            }
    
            static public void Sort2(int[] arr, int beg, int end)
            {
                if (end - beg < 1)
                    return;
    
                if (end == beg + 1)
                {
                    if (arr[beg] > arr[end])
                        lib.Swap<int>(arr, beg, end);
                    return;
                }
    
                int midVal = arr[beg];
                int minIdx = beg+1;
                int maxIdx = end;
    
                while(minIdx < maxIdx)
                {
                    while (minIdx < maxIdx && arr[minIdx] < midVal)
                        minIdx++;
    
                    while (minIdx < maxIdx && arr[maxIdx] >= midVal)
                        maxIdx--;
    
                    if (minIdx != maxIdx)
                        lib.Swap<int>(arr, minIdx, maxIdx);
                }
    
                if (arr[minIdx] >= midVal)
                {
                    lib.Swap<int>(arr, minIdx - 1, beg);
                    Sort2(arr, beg, minIdx - 2);
                    Sort2(arr, minIdx, end);
                }
                else
                {
                    lib.Swap<int>(arr, minIdx, beg);
                    Sort2(arr, beg, minIdx - 1);
                    Sort2(arr, minIdx+1, end);
                }
            }
    
            static public void Sort3(int[] arr, int beg, int end)
            {
                if (beg >= end)
                    return;
    
                if (end == beg + 1)
                {
                    if (arr[beg] > arr[end])
                        lib.Swap<int>(arr, beg, end);
                    return;
                }
    
                int first = beg;
                int last = end;
                int key = arr[beg];
    
                while (last > first)
                {
                    if (arr[last] > key)
                    {
                        last--;
                        continue;
                    }
    
                    if (arr[first] <= key)
                    {
                        first++;
                        continue;
                    }
                    lib.Swap(arr, first, last);
                }
                lib.Swap(arr, beg, first);
    
                Sort3(arr, beg, first - 1);
                Sort3(arr, first + 1, end);
            }
        }
    }
  • 相关阅读:
    Java程序设计11——异常处理
    Hive安装及配置
    zookeeper集群安装(转)
    Linux网络服务管理命令
    Linux网络配置常用命令
    IP地址及子网掩码计算
    linux ftp、sftp、telnet服务开通、更改Orale最大连接数
    SQL多表连接
    用css伪类实现提示框效果
    关于DOM操作的性能优化
  • 原文地址:https://www.cnblogs.com/wrbxdj/p/4986452.html
Copyright © 2020-2023  润新知