• 快速排序(C#数据结构学习十)


    using System;
    using System.Collections.Generic;
    using System.Text;

    namespace SoloDataStructure
    {
        
    class MyQuickSort
        
    {
            
    /// <summary>
            
    /// 快速排序算法
            
    /// </summary>
            
    /// 快速排序为不稳定排序,时间复杂度O(nlog2n),为同数量级中最快的排序方法
            
    /// <param name="arr">划分的数组</param>
            
    /// <param name="low">数组低端上标</param>
            
    /// <param name="high">数组高端下标</param>
            
    /// <returns></returns>

            static int Partition(int[] arr, int low, int high)
            
    {
                
    //进行一趟快速排序,返回中心轴记录位置
               
    // arr[0] = arr[low];
                int pivot = arr[low];//把中心轴置于arr[0]
                while (low < high)
                
    {
                    
    while(low<high && arr[high]>=pivot)
                    
    --high;
                
    //将比中心轴记录小的移到低端
                Swap(ref arr[high],ref arr[low]);
                    
    while(low<high && arr[low]<=pivot)
                    
    ++low;
                Swap(
    ref arr[high],ref arr[low]);
               
    //将比中心轴记录大的移到高端
                }

                arr[low] 
    = pivot; //中心轴移到正确位置
                return low;  //返回中心轴位置
            }

            
    static void Swap(ref int i, ref int j)
            
    {
                
    int t;
                t 
    = i;
                i 
    = j;
                j 
    = t;
            }
     
            
    static void QuickSort(int[] arr,int low,int high)
            
    {
                
    if (low < high-1)//当 arr[low,high]为空或只一个记录无需排序
                {
                    
    int pivot = Partition(arr,low,high);
                    QuickSort(arr,low,pivot
    -1);
                    QuickSort(arr,pivot
    +1,high);

                }

            }

            
    static void Main(string[] args)
            
    {
                
    int[] arr=new int[]{54,62,99,14,28,1,8,77,99,3,110};
                QuickSort(arr, 
    0, arr.Length-1);
                Console.Write(
    "Data After QuickSort:");
                
    foreach (int i in arr)
                
    {
                    Console.Write(i
    +",");
                }

                Console.ReadLine();
            }

        }

    }

  • 相关阅读:
    C#多线程学习(五) 多线程的自动管理(定时器)
    一个Web开发的客户端基础技术测试Demo
    Ext简介(转)
    CSDN网友挑选的2007年最有价值文章
    C#+flash socket 聊天程序(转)
    一个索引查找的ASP.NET示例探讨
    程序员应该如何使用大脑?
    C#多线程学习(二) 如何操纵一个线程
    一个C#的加锁解锁示例
    ASP.NET如何存取SQL Server数据库图片(转)
  • 原文地址:https://www.cnblogs.com/solo/p/610139.html
Copyright © 2020-2023  润新知