美文网首页
快速排序与寻找第k小的数算法

快速排序与寻找第k小的数算法

作者: 知识学者 | 来源:发表于2018-04-25 19:07 被阅读55次

慕课网 首发了,放在垂直领域吧。简书备份。

出现了一点小问题,就是index,要注意。想法网上一大堆,不多说了。

ubuntu18下输入法有问题,sogou没有安装上,打字好累啊。

sou.png
package day20180425;

public class SortDem {

    public static void main(String[] args) {
        
         int[] arr={32,68,-98,51,88,1};
         display(arr);
        System.out.println();
        quicksort(arr,0,arr.length-1);
        display(arr);

    }
    
    static int keyfid(int[] arr,int left ,int right)
    {
        int i=left,j=right,temp;
         int p=arr[left];
     /*
      * 是i<j,当二个相遇的时候就要交换   
      * 还可以变成 while(i!=j) 
      */
        while(i<j)
        {
        // 当大于等与关键字就要交换 
           while(i<j&&p<=arr[j])
               j--;
           while(i<j&&p>=arr[i])
               i++;
           if(i<j)
            {
               temp=arr[i];
               arr[i]=arr[j];
               arr[j]=temp;
             }
        }
        
        arr[left]=arr[i];
        arr[i]=p;
        return i;
    }
    
    
    static void quicksort(int[] arr, int left,int right)
    {
        int key;
        if(left>right)
        return;
        else
        {
           key=keyfid(arr,left,right);
           quicksort(arr,left,key-1);
           quicksort(arr,key+1,right);
            
        }
        
    }
    
    
    static void display(int[] arr)
    {
        for(int value:arr)
        System.out.print(" "+value);
    }

}
 32 68 -98 51 88 1
 -98 1 32 51 68 88

寻找一个数组中第k小的数,比如 [32 68 -98 51 88 1]中,选择第3小的数,就是32,一种想法是把数字排序,在去下标,但是可以利用快排。其实只要取得轴值就可以了。

static int sort(int[] arr,int k,int left,int right)
    {
        int index;
        index=keyfid(arr,left,right);
        if(k-1==index)
            return arr[index];
        else if(index>k)
        {
            return sort(arr,k,left,index-1);
        }
        else
            return sort(arr,k,index+1,right);
            
        
    }
第3小的数为:32

相关文章

  • 06-20:刷题综合三:快排

    快排: 1、快速排序 2、快速排序寻找第K个大 3、最小的K个数 1、手写快排算法 class Solution:...

  • 快速排序与寻找第k小的数算法

    慕课网 首发了,放在垂直领域吧。简书备份。 出现了一点小问题,就是index,要注意。想法网上一大堆,不多说了。 ...

  • 算法-快速排序

    快速排序 变形 : 快速排序(剪枝法)-找出数组中第k小的数 采用快速排序的思想来实现。选一个数 baseValu...

  • 排序算法

    一、排序算法总结 排序算法题目 排序算法快速排序堆排序归并排序 应用最小K个数(TopK问题)215.数组中的第K...

  • BFPRT算法O(n)解决第k小的数

    第k小算法 我们通常会简单地进行一个快速排序后,得到第k个位置上的数字即可。我们都知道的是快速排序是个不稳定的排序...

  • BFPRT算法O(n)解决第k小(第k大)的数

    第k小算法 我们通常会简单地进行一个快速排序后,得到第k个位置上的数字即可。我们都知道的是快速排序是个不稳定的排序...

  • Leetcode.215.Kth Largest Element

    题目 给定一个数组, 输出第k大的数. 思路 进行从大到小排序, 第k-1即为第k大的数. 总结 掌握快速排序.

  • ologn排序算法后的两个问题

    求一个数组的逆序数对的个数(归并排序) 求出nums里第k小的数(快速排序)

  • 快速排序

    教科书的快速排序算法 剑指offer的快速排序算法 算法的主要思路是,选随机选取一个介于数组长度与0之间的数,然后...

  • 排序算法之快速排序

    排序算法之快速排序算法 快速排序思想:选一个基准数将所有的元素都比较一遍,将大于基准数的放到基准数的右边,小于它的...

网友评论

      本文标题:快速排序与寻找第k小的数算法

      本文链接:https://www.haomeiwen.com/subject/uzixlftx.html