博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
912. Sort an Array
阅读量:2352 次
发布时间:2019-05-10

本文共 2612 字,大约阅读时间需要 8 分钟。

Given an array of integers nums, sort the array in ascending order.

我的想法

快排模板

注意!!!为了使左右指针错开,以防止死循环,快排的所有判断都要带等号!

class Solution {
public List
sortArray(int[] nums) {
quickSort(nums, 0, nums.length - 1); List
res = new ArrayList<>(); for(int i = 0; i < nums.length; i++) {
res.add(nums[i]); } return res; } private void quickSort(int[] nums, int start, int end) {
if(start >= end) {
return; } int left = start, right = end; int pivot = nums[(start + end) / 2]; while(left <= right) {
while(left <= right && nums[left] < pivot) {
left++; } while(left <= right && nums[right] > pivot) {
right--; } if(left <= right) {
int temp = nums[left]; nums[left] = nums[right]; nums[right] = temp; left++; right--; } } quickSort(nums, start, right); quickSort(nums, left, end); }}

归并模板

注意!!!在merge数组时,因为是在每段内排序,index是从start开始的!

class Solution {
public List
sortArray(int[] nums) {
int[] temp = new int[nums.length]; mergeSort(nums, 0, nums.length - 1, temp); List
res = new ArrayList<>(); for(int i = 0; i < nums.length; i++) {
res.add(nums[i]); } return res; } private void mergeSort(int[] nums, int start, int end, int[] temp) {
if(start >= end) {
return; } mergeSort(nums, start, (start + end) / 2, temp); mergeSort(nums, (start + end) / 2 + 1, end, temp); merge(nums, start, end, temp); } private void merge(int[] nums, int start, int end, int[] temp) {
int middle = (start + end) / 2; int leftIndex = start; int rightIndex = middle + 1; //注意!!!是在每段内排序,index是从start开始的!!! int index = start; while(leftIndex <= middle && rightIndex <= end) {
if(nums[leftIndex] < nums[rightIndex]) {
temp[index++] = nums[leftIndex++]; } else {
temp[index++] = nums[rightIndex++]; } } while(leftIndex <= middle) {
temp[index++] = nums[leftIndex++]; } while(rightIndex <= end) {
temp[index++] = nums[rightIndex++]; } //同上 for(int i = start; i <= end; i++) {
nums[i] = temp[i]; } }}

解答

转载地址:http://jyqvb.baihongyu.com/

你可能感兴趣的文章
ZooKeeper 配置
查看>>
向EXCEL模板文件中写入数据和插入新行
查看>>
怎样用java生成GUID与UUID
查看>>
程序员生存定律--管理向左,技术向右
查看>>
SQLite学习手册(索引和数据分析/清理)
查看>>
数据库索引的作用和优点缺点
查看>>
Protocol Buffer技术详解(语言规范)
查看>>
Protocol Buffer技术详解(C++实例)
查看>>
Protocol Buffer技术详解(Java实例)
查看>>
Protocol Buffer技术详解(数据编码)
查看>>
速查笔记(Linux Shell编程<上>
查看>>
速查笔记(Linux Shell编程<下>
查看>>
Linux Shell常用命令总结
查看>>
Linux Shell常用技巧(一)
查看>>
Linux Shell常用技巧(二)
查看>>
Linux Shell常用技巧(三)
查看>>
Linux Shell常用技巧(四)
查看>>
Linux Shell常用技巧(五)
查看>>
Linux Shell常用技巧(六)
查看>>
Linux Shell常用技巧(七)
查看>>