快速排序算法Java实现,C语言实现

快速排序算法

介绍

快速排序算法,是一种基于分治法的交换排序算法:在待排序表L[1…n]中任取一个元素pivot作为基准(通常取首元素为基准),通过一趟排序将待排序表根据基准划分为两个部分:L[1… i - 1]与L[i + 1…n],其中L[i]为pivot基准元素,其中在L[1… i - 1]这一部分的所有元素都小于基准值pivot,L[i + 1…n]这一部分全都大于或者等于基准值pivot。称这过程为一次划分,然后分别递归此函数,操作两边的部分,直到每个部分内只有一个元素或者每个部分为空,为函数的退出条件。

Java代码实现:

/**
* @param arr   待排序数组
* @param start 低位指针
* @param end   高位指针
*/
private static void quickSort(int[] arr, int start, int end) {
    // {4, 6, 10, 7, 3, 8, 5, 44, 2}; 测试数据
    // 低位指针大于高位指针,标识数组为有序数组
    if (start >= end) return;
    // 存放基准数据
    int standard = arr[start];
    int low = start, high = end;
    while (low < high) {
        while (arr[high] >= standard && low < high) {
            // 高位指针--
            high--;
        }
        // 高位指针处的数据小于低位的,则高位的数据应该在地位,复制过去
        arr[low] = arr[high];
        // 当低位指针小于高位指针时,标识遍历完整个数据
        while (arr[low] <= standard && high > low) {
            // 低位指针++
            low++;
        }
        // 低位指针处的数据大于高位的,则低位的数据应该在高位,复制过去
        arr[high] = arr[low];
    }
    // 将基准量数据放回去
    arr[low] = standard;
    // 递归小于基准量的低位数据
    quickSort(arr, start, high);
    // 递归大于基准量的高位数据
    quickSort(arr, low + 1, end);
}

C代码实现:

逻辑与Java一致

void quick_sort(int arr[], int start, int end) 
{
    if (start >= end) 
    {
        return;
    }
    // 取首元素作为基准值
    int low = start, high = end, pivot = arr[start];
    while (low < high) 
    {
        // 
        while (arr[high] >= pivot && low < high) 
        {
            high--;
        }
        arr[low] = arr[high];
        while (arr[low] <= pivot && low < high) 
        {
            low++;
        }
        arr[high] = arr[low];
    }
    arr[low] = pivot;
    // 开始递归
    quick_sort(arr, start, low);
    quick_sort(arr, low + 1, end);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值