zoukankan      html  css  js  c++  java
  • QuickSortSplit

       static int Split(int[] arr, int first, int last)        

      {

                int splitPos = first;

                int pivot = arr[first];

                int lastExchangePos = first;

                bool getLastExchange = false;

                for (int i = last; i >= first + 1; --i )

                {                

           if (arr[i] < pivot && arr[i - 1] > pivot)

                     {                    

            getLastExchange = true;

                           lastExchangePos = i;

                           break;

                     }            

        }

                for (int i = first + 1; i <= last; i++)

                {                               

          if (arr[i] < pivot)                

          {                    

            Swap<int>(ref arr[i], ref arr[splitPos]);

                          splitPos++;

                     }            

        }

                if (getLastExchange)

                {              

          Swap<int>(ref arr[lastExchangePos], ref arr[splitPos]);            

        }

                return splitPos;

            }

        

       关键:找到最后需在splitPos处交换Pivot值的地方,即找到最后该值的特征。

      简单处理:用C#函数即可。

      

            //static int Split(int[] arr, int first, int last)

            //{

            //    int splitPos = first;

            //    int pivot = arr[first];

            //    for (int i = first + 1; i <= last; i++)

            //    {

            //        if (arr[i] < pivot)

            //        {

            //            Swap<int>(ref arr[i], ref arr[splitPos]);

            //            splitPos++;

            //        }

            //    }

            //    Swap<int>(ref arr[Array.IndexOf(arr, pivot)], ref arr[splitPos]);    //indexof(pivot);  ,即存初值的用处

            //    return splitPos;

            //}

      

        

      

  • 相关阅读:
    C++实现希尔排序和快排
    操作系统重点知识汇总
    结构体(对齐规则及举例)
    指针和引用(传指针和传引用)
    数组和指针
    判断一个字符是否为数字的两种方法(C/C++)
    浅谈操作系统栈和堆(区别与联系)
    浅谈malloc/free和new/delete 的区别
    操作符和表达式
    windows重装系统后grub引导菜单修复方法(亲自实验过)
  • 原文地址:https://www.cnblogs.com/frank2008syj/p/2664276.html
Copyright © 2011-2022 走看看