快排

作者: 1哥 | 来源:发表于2023-08-22 16:33 被阅读0次

快排

1. 要点:
**i. partition: **将整个数组切成两片,切片返回index:
[l, h] ==> [l,index-1], index, [index+1, h]
ii. 递归partition
2. 具体伪代码
i. partition

key = nums[l];
i=l;
j=h;
while(i < j) {
  每个loop 目标找到一对i, j; 使得nums[i] > key > nums[j]
 寻找方法:
沿着<--------  j-- 方向找比key 小的位置,就找到了j;
沿着---------> i++ 方向找 比key 大的位置,就找到了i;
 找到后,交换swap nums[i],nums[j] 
}
最后nums[i]=key

ii. 递归的sort [l, index-1]和 sort [index+1,h]
3.实现代码

int partition(int *nums, int l, int h)
{
  int i=l;
  int j=h;
  int key = nums[l];

  while(i < j) {
    while(i<j && key < nums[j]) j--;
    while(i<j && key > nums[i]) i++;
    swap(&nums[i], &nums[j]);
  }
  nums[i]=key;
  return i;
}

void quicksort(int *nums, int l, int h)
{
  if (l < h) {
    int index = partition(nums, l, h);
    quicksort(nums, l, index -1 );
    quicksort(nums, index +1, h);
  }
}

相关文章

  • 快排

    快排代码

  • 快排

  • 快排

    昨天晚上睡觉前兴起准备十分钟写出快排,结果纠结了两个小时愣是没有搞出来,很郁闷地睡觉去。今天地铁上跟LG又重新缕了...

  • 快排

    基本思想: 先从数列中取出一个数作为基准数。 分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的...

  • 快排

  • 快排

    python实现 java实现:

  • 快排

    快速排序: 基本思想:1、先从数列中取出一个数作为基数。2、分区,将比此基数大的数放到它右边,小的数放到它左边。3...

  • 快排

    package sort;import java.util.Arrays;public class Quickso...

  • 快排

  • 快排

    一、(1)假如有一个数组 [8,10,2,3,6,1,5] ,我们拿出5作为参考,将小于5的数放到它的左边,大于5...

网友评论

      本文标题:快排

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