zoukankan      html  css  js  c++  java
  • 《算法导论》——随机化快排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;
    }

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

  • 相关阅读:
    python web 框架的基本逻辑练习题
    jQuery 自定义方法(扩展方法)
    jQuery 的动画效果图片----隐藏打开方法
    jQuery 小练习-拖拉画面
    用jQuery来绑定事件的3种方法和区别
    css用hover制作下拉菜单
    巧用hover改变css样式和背景
    mpvue中按需引入echarts
    webpack配置css浏览器前缀
    Vue中使用Sass全局变量
  • 原文地址:https://www.cnblogs.com/DKSL/p/3151787.html
Copyright © 2011-2022 走看看