大佬教程收集整理的这篇文章主要介绍了快速排序模版,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
记录一下快速排序的模版,快排有很多种写法,记一种理解的模版就可以了。
public void quickSort(int[] nums, int left, int right) { if (left >= right) { return; } int pivot = nums[left]; int i = left - 1, j = right + 1; while (i < j) { // 这两个while循环的顺序可以交换,顺序不重要 while (nums[--j] > pivot) { } while (nums[++i] < pivot) { } if (i < j) { swap(nums, i, j); } } // 关键点是怎么切分,当退出循环后 // nums[j]左边的数都小于pivot,nums[i]右边的数都大于pivot // 而i和j的关系有两种,要么i=j,要么i=j+1 // 所以切分时可以用[left,i-1][i,rigjt],和[left,j][j+1,right]这两种 // 而我们选取的pivot是最左边的数,当pivot一开始就处于正确的位置,即此时i=left时 // 这时按[left,i-1][i,rigjt]切分就会出现死循环,第二段区间依然是[left, right] // 故当我们选取left为pivot时,需要用[left,j][j+1,right]来切分 // 同理,当我们选取最后一个值为pivot时,需要用i来切分,防止j的位置不变,导致死循环 quickSort(nums, left, j); quickSort(nums, j + 1, right); } private void swap(int[] arr, int i, int j) { int tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; }
以上是大佬教程为你收集整理的快速排序模版全部内容,希望文章能够帮你解决快速排序模版所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。