笔试 | Java 中 7 种常见的排序算法实现

1. 快速排序

1.1 方法1

思路:

  1. 在数据集中,选择一个元素作为"基准(pivot)"

  2. 分区(partition):所有小于"基准"的元素,都移到"基准"的左边;所有大于"基准"的元素都移到"基准"的右边

  3. 分区操作结束后,基准元素所处的位置就是最终排序后它所处的位置

  4. 对"基准"左边和右边的两个子集,不断重复第一步和第二步,直到所有子集都只剩下一个元素为止

/**
 * @param arr 待排序数组
 * @param low  数组第一个元素索引
 * @param high 数组最后一个元素的索引
 * @return 排序后的数组
 */
public static int[] quickSort(int[] arr,int low,int high) {
    //对low和high进行大小判断(此处如果仅对数组arr做非空及是否有元素判断会出现栈溢出)
    if(low >= high) {
        return arr;
    }
    //将arr一分为二
    int middleIndex = partition(arr,low,high);
    //对基准左边的进行递归排序
    quickSort(arr,low,middleIndex-1);
    //对基准右边的进行递归排序
    quickSort(arr,middleIndex+1,high);
    return arr;
}
1.2 方法2
/**获得"基准"(默认是最低位low)在数组排序后所在位置
 * @param arr 待查找数组
 * @param low 开始位置
 * @param high 结束位置
 * @return "基准"所在位置
 */
private static int partition(int[] arr, int low, int high) {
    //每次都假设数组第一个位置的元素作为基准
    int temp = arr[low];
    while (low < high) {
        while (arr[high] >= temp && high > low) {//后半部分向前扫描
            //将临时基准元素与其右边的元素依次比较,值大于等于它的将high--
            //当low<=high时,获取到等于或小于临时基准元素的元素
            high--;
        }
        //将小于或等于基准元素的元素移到基准元素左边最低端
        arr[low] = arr[high];
        while (arr[low] <= temp && high > low) {//从前半部分扫描
            low++;
        }
        //将大于或等于基准元素的元素移到基准元素右边最高端
        arr[high] = arr[low];
    }
    //基准值
    arr[low] = temp;
    //返回最终基准
    return low;
}

2. 选择排序

2.1 方法1

思路:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值