• 《算法导论》——随机化快排RandomizedQuickSort


      今日算法:随机化快排RandomizedQuickSort

      基础工作swap交换和partition分治

    /*
        *交换数组的两个元素
        *fromIndex和toIndex为要交换的两个元素的索引
        */
        void swap(int *numArray,int fromIndex,int toIndex)
        {
            int temp=numArray[fromIndex];
            numArray[fromIndex]=numArray[toIndex];
            numArray[toIndex]=temp;
        } 
    
        int partition(int *numArray,int head,int tail)
        {
            int x=numArray[tail];
            int i=head-1;
            for(int j=head;j<tail;j++)
            {
                if(numArray[j]<=x)
                {
                    i++;
                    swap(numArray,i,j);
                }
            }
            swap(numArray,i+1,tail);
            return i+1;
        }
    View Code

      随机选择主元,快排

    int randomizedPartition(int *numArray,int head,int tail)
        {
            int i=rand()%(tail-head+1)+head;
            swap(numArray,tail,i);
            return partition(numArray,head,tail);
        }
    
        void randomizedQuickSort(int *numArray,int head,int tail)
        {
            if(head<tail)
            {
                int q=randomizedPartition(numArray,head,tail);
                randomizedQuickSort(numArray,head,q);
                randomizedQuickSort(numArray,q+1,tail);
            }
        }

    测试及结果:

    #include "stdafx.h"
    #include <iostream>
    #include "RandomizedQuickSort.h"
    
    using namespace std;
    using namespace dksl;
    int _tmain(int argc, _TCHAR* argv[])
    {
        int *a=new int[10];
        for(int i=0;i<10;i++)
            a[i]=rand(); 
        cout<<"排序前:";
        for(int i=0;i<10;i++)
            cout<<a[i]<< " ";
        cout<<endl;
        randomizedQuickSort(a,0,9);
        cout<<"排序后:";
        for(int i=0;i<10;i++)
            cout<<a[i]<< " ";
        cout<<endl;
        system("PAUSE");
        return 0;
    }

    必须注意的是,此算法排序的数组中不能出现重复的元素。

  • 相关阅读:
    浅谈Java Future
    图解java泛型的协变和逆变
    编写junit单元测试
    VBA中的Declare PtrSafe兼容64位系统
    在Python反编译中出现Magic value mismatch
    在Python反编译中批量pyc转 py
    ArcGIS Earth数据加载
    ArcGIS Earth 3D交互测量
    Linux系统清空或删除大文件内容5种方法
    安卓模拟器
  • 原文地址:https://www.cnblogs.com/DKSL/p/3151787.html
Copyright © 2020-2023  润新知