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;
}
}