zoukankan      html  css  js  c++  java
  • 排序快速排序算法

     待排序无序数组 a[10]={34,2,77,23,1,5,7,9,11,44}

    (第一轮) 

    第一步:设左边第一个元素34为基准元素base,拿出来放在一边,这样34的位置就空了出来

    第二步:从最右边开始向左一个个地和base比较,当找到比base小的元素11,就把它放到34空出来的位置上,这样11的位置空了出来

    第三步:从最左边开始向右一个个地和base比较,当找到比base大的元素77,就把它放到11空出来的位置上,这样77的位置空了出来

    第四步:又从最右边开始向左一个个地和base比较,当找到比base小的元素9,就把它放到77空出来的位置上,这样9的位置空了出来

    第五步:又从最左边开始向左一个个地和base比较,当找到元素9的位置时还是找到不比base大的,就把base(34)放在元素9的位置上,现在base(34)的左边都是比它小的元素,右边都是比它大的元素,这样base(34)的位置就可以确定了,位置下标为7

    (第二轮)

     把上一轮找出的位置下标7左边的所有元素分为一新的数组,右边的也分为新的一组,分别重复第一轮的步骤

    (......)

     每重复一轮可以确定一个元素的具体位置,直到所有元素都确定好位置

    平均时间复杂度为:O(N*LogN)

    最差时间复杂度为:O(N^2)

    是否稳定:不稳定

    C++代码如下:

    #include "stdafx.h"

    using namespace System;

    int Division(int a[],int left,int right)
    {
        int base=a[left];
        while(left<right)
        {
            while(left < right && a[right]>base)
            {
                right--;
            }
            a[left]=a[right];

            while(left < right && a[left]<base)
            {
            left++;
            }
            a[right]=a[left];
        }
        a[left]=base;
        return left;
    }

    //快速排序
    void Quick(int a[],int left,int right)
    {
        int i,j;
        if(left<right)
        {
            i = Division(a,left,right);
            Quick(a,left,i-1);
            Quick(a,i+1,right);
        }

    }


    int main(array<System::String ^> ^args)
    {
        int i,a[10]={34,2,77,23,1,5,7,9,11,44};
        Console::WriteLine("sort before:");
        for(i=0;i<10;i++)
        {
        Console::Write(a[i]+ " | ");
        }

        Console::WriteLine("\n");

        Quick(a,0,9);

        Console::WriteLine("sort after:");
        for(i=0;i<10;i++)
        {
        Console::Write(a[i]+ " | ");
        }

        Console::ReadLine();
        return 0;
    }

  • 相关阅读:
    SpringMVC访问静态资源
    tomcat 在linux下的关闭问题
    Mysql中MyISAM、InnoDB两种表类型的区别
    大数据——数据库优化
    for循环 java.lang.OutOfMemoryError: Java heap space
    Tomcat内存溢出的三种情况及解决办法分析
    浅谈eclipse生成的.classpath文件(转)
    深入理解java异常处理机制
    漫步ASP.NET MVC的处理管线
    用 javascript 获取当页面上鼠标(光标)位置
  • 原文地址:https://www.cnblogs.com/kavilee/p/2724339.html
Copyright © 2011-2022 走看看