zoukankan      html  css  js  c++  java
  • 快速排序设置枢轴

    设有一个元素为整数的线性表L,放在A[0.....n]中,设计一个算法以A[n-1]为参考量,使数组左部分小于A[n],右部分大于A[n-1],要求结果仍然保存在数组中。
    分析:本题属于快排算法的划分部分。

    void Q_partition(int a[],int n)//n是数组的长度
    {
        int i,j;
        i=0,j=n-1;
        int temp;
        temp =a[j];
        a[j]=a[i];
        a[i]=temp;
        temp =a[i];
        while(i!=j)
        {
            while(j>i&&a[j]>temp)//从右往左扫找到小于temp的元素
                j--;
            if(i<j)//找到该元素填入a[i]这个空位。
            {
                a[i]=a[j];
                i++;
            }
            while(i<j&&a[i]<temp)//从左往右扫找到大于temp的元素。
                i++;
            if(i<j)
            {
                a[j]=a[i];//找到该元素填入该空位。
                j++;
            }
        }
        a[i]=temp;//最后将枢轴放入它在有序数组所在的位置。
    }
    

    注:以上解法来自天勤
    我的思路:如果仅仅在一趟排序中确定待排元素的位置,可以通过for循环找到小于a[n-1]的元素个数number,然后a[n-1]的值插到a[number]中,后面的元素后移一位。然后在0number-1内找比a[number]大的数将其与在number+1n-1的数进行交换。找到就跳出。

    void myPartition(int a[],int n)
    {
        int i=0,j=0;
        int number=0;
        int temp;
        for(;i<n-1;i++)
        {
            if(a[i]<a[n-1])
                number++;
        }
        temp=a[number];
        a[number]=a[n-1];
        for(i=n-1;i>number;i--)
        {
            a[i+1]=a[i];
        }
        a[number+1]=temp;
        for(i=0;i<number;i++)
        {
            if(a[i]>a[number])
            {
                for(j=number+1;j<n;j++)
                {
                    if(a[j]<a[number])
                    {
                        temp=a[i];
                        a[i]=a[j];
                        a[j]=temp;
                        break;
                    }
    
                }
            }
        }
         for(i=0;i<n;i++)
            {
                cout<<' '<<a[i];
            }
    }
    

  • 相关阅读:
    Kafka日志及Topic数据清理
    python
    kotlin集合操作
    tomcat 下配置 可 调试
    linux 安装nexus3
    启动 idea 编译报错 kotlin
    nginx 增加 lua模块
    logstash配合filebeat监控tomcat日志
    redis 高级特性 不要太好用
    SpringBoot与Docker1
  • 原文地址:https://www.cnblogs.com/jearchen/p/9819884.html
Copyright © 2011-2022 走看看