5.5
使用的快排,一直超时,整个人都不好了。
今天终于找到了错误。
while (l < h && A[h] > key){
--h;
}
A[l] = A[h];
while(l < h && A[l] <= key){
++l;
}原来是这里,少了一个等于号。只判断了大于和小于的情况,没有判断等于,这样就造成了死循环。
所以就一直一直超时,真的是要很细心,很认真才可以呢。
归并排序和堆排序一直一直懒得去好好学习,等着有时间也看看吧。
复杂度O(nlogN)的算法,还是要多看看的。
天天用插入排序和冒泡排序,也不行吖。
public class Solution {
/**
* @param A an integer array
* @return void
*/
public void sortIntegers2(int[] A) {
int heigh = A.length-1;
int low = 0;
sort(A,low,heigh);// Write your code here
}
public int[] sort(int[] A ,int low,int height){
if (low >= height){
return A;
}
int h = height;
int l = low;
int key = A[low];
while (l < h){
while (l < h && A[h] > key){
--h;
}
A[l] = A[h];
while(l < h && A[l] <= key){
++l;
}
A[h] = A[l];
}
A[l] = key;
sort(A,low,l-1);
sort(A,l+1,height);
return A;
}
}
本文记录了一次使用快速排序算法过程中遇到的问题及解决方法。作者发现因条件判断缺失导致的死循环问题,并分享了修复后的正确代码实现。同时,提到了对于归并排序和堆排序的学习计划。
6303

被折叠的 条评论
为什么被折叠?



