快速排序、聚簇索引、寻找数据中第k大的值

快速排序代码

public class Quick {
    public static void main(String[] args) {
        int [] nums = {4,2,4,4,5,1,10,8,6,5,7,100};
        System.out.println(Arrays.toString(nums));
        QuickSort(nums,0,nums.length-1);
        System.out.println(Arrays.toString(nums));
    }

    private static void QuickSort(int[] nums, int beigin, int end) {
        if(beigin > end){
            return ;
        }
        int i = beigin;
        int j = end;
        int v = nums[beigin];
        while(i < j ){
            while(i < j && nums[j]> v){
                j--;
            }
            while(i < j && nums[i] <= v){
                i++;
            }
            int temp = nums[j];
            nums[j] = nums[i];
            nums[i] = temp;
        }
        nums[beigin] = nums[i];
        nums[i] = v;
        QuickSort(nums,beigin,i-1);
        QuickSort(nums,i+1,end);
    }
}

聚簇索引和非聚簇索引的区别

聚簇索引:索引项的排序方式和表中数据记录排序方式一致的索引(字典中的拼音查找汉字)innodb

非聚集索引:索引顺序与物理存储顺序不同(字典中的偏旁部首查找汉字)myisam

聚簇索引的叶子节点就是数据节点,索引和数据在一起。

稠密索引和稀疏索引

稠密索引:每个索引键值对都对应一个索引项;

稀疏索引:只为某些搜索码值建立索引记录;

稀疏索引的优点是:所占用的空间更小,且插入和删除时维护开销也小。

寻找数据中第k大的值(基于快排)

public class Quic4 {
    public int findKthLargest(int[] nums, int k) {
        return getKth(nums, 0, nums.length - 1, nums.length - k);
    }

    public int getKth(int[] nums, int start, int end, int k) {

        int pivot = nums[start];

        int left = start;
        int right = end;

        while (left < right) {

            while (left < right && nums[right] > pivot) {
                right--;
            }
            while (left < right && nums[left] <= pivot) {
                left++;
            }
            swap(nums, left, right);
        }

        swap(nums, left, start);

        if (k == left) {
            return pivot;
        } else if (k < left) {
            return getKth(nums, start, left - 1, k);
        } else {
            return getKth(nums, left + 1, end, k);
        }
    }

    public void swap(int[] nums, int n1, int n2) {
        int tmp = nums[n1];
        nums[n1] = nums[n2];
        nums[n2] = tmp;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值