zoukankan      html  css  js  c++  java
  • 给定数组,查找最小的k个元素或最大的k个元素 快速排序算法灵活应用

    假定有这样一组数列 { 10, 33, 2, 4, 55, 6, 12, 34, 456, 66, 43, 23, 65, 1, 345, 61, 76, 31, 43, 76 };

    如和求出最小的k个值,或最大的k个值?

    借鉴快速排序算法,下面是本科教材《数据结构》中的快速排序:

     1 void QuickSort ( int A[ ], int head, int rear )
     2 {
     3   int pivot;
     4   if( head < rear )  // 肯定为真的条件
     5   {
     6     pivot = Partition ( A, head, rear );
     7     QuickSort( A, head, pivot-1 );
     8     QuickSort( A, pivot+1, rear );
     9   }
    10 }
    11 
    12 int Partition ( int A[ ], int left, int right )  //这是左大右小的排序
    13 {
    14   int pivot = A[ left ];
    15   while( left < right )
    16   {
    17     while( right > left && A[ right ] >= tem )
    18       right--;
    19     A[ left ] = A[ right ];
    20     while( left < right && A[ left ] <= tem )
    21       left++;
    22     A[ right ] = A[ left ];
    23   }
    24   A[ left ] = tem;
    25   return left;  //最后left=right,所以返回哪个都一样
    26 }

    下面稍作修改,改为仅把最小的K个元素放在前k个位置上:

     1  void QuickSearch( int A[], int head, int rear, int k )
     2 {
     3   int pivot;
     4   if ( head < rear )  //肯定为真的条件
     5   {
     6     pivot = partition( A, head, rear );
     7     if( piovt < K )
     8       QuickSearch( A, pivot-1, rear, int K-pivot );
     9     if( pivot > k )
    10       QuickSearch( A, head, pivot-1, int K );      
    11   }
    12 }
  • 相关阅读:
    微信小程序开发——修改小程序原生checkbox、radio默认样式
    微信小程序开发——微信小程序下拉刷新真机无法弹回
    转:slf4j-api、slf4j-log4j12、log4j之间关系
    MyBatis3 入门学习指南
    Java 多线程重排序的探究
    Kafka 生产者和消费者入门代码基础
    Java面试题
    刻苦读书的故事合集
    Win10 calc.exe 无法打开计算器的解决方法
    Redis(三):set/get 命令源码解析
  • 原文地址:https://www.cnblogs.com/kevinGaoblog/p/2432574.html
Copyright © 2011-2022 走看看