• 快速排序


    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);
            }
        }
    }
  • 相关阅读:
    安装oracle11g服务端
    安装oracle11g客户端
    Python生成requirements.txt方法
    oracle创建新用户并授予权限
    正向代理与反向代理【总结】
    使用Eclipse调试Java程序的10个技巧
    如果长颈鹿哭了,它会不会要哽咽好久
    你应该知道的10种软件工具
    我希望在20岁时就知道的26条时间管理技巧
    Vue使用NProgress (NProgress是页面跳转是出现在浏览器顶部的进度条)
  • 原文地址:https://www.cnblogs.com/wrbxdj/p/4986452.html
Copyright © 2020-2023  润新知