快速排序:
我这里用了递归的方式完成了快速排序,快速排序是:首先用第一个元素作为基准,定义一个变量i指向它,定义一个变量j指向尾部,先从后往前扫描,遇到比基准小的就让i 和 j所指向的元素互相调换位置,然后再从i往后扫描,遇到比基准大的就让i 和 j所指向的元素互相调换位置,再从j往前扫描,依次类推,直到i和j指向同一个元素之后,这个元素就是基准值,并且前面的数字都比它小,后面的数字都比它大,然后通过递归的方式,将这个数字之前和之后的都用这样的方法排序,一直到所需要排序的只有一个元素,那么这个序列就已经排序好了。
代码如下 :
import java.util.Arrays;
public class FastSortDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = new int[]{8,3,5,2,4,6,4,5,7,8,10,3};
int[] data = {1,2,3,4,5,6,0,7,8,9,10,0};//不知道为什么这一行数据放到其中结果是错误的,看不出来哪里的问题
fastSort(arr,0,arr.length-1);
System.out.println(Arrays.toString(arr));
}
public static void fastSort(int[] arrs,int left,int right){
if(left>=right){
return ;
}else{
int temp = arrs[left];
int i=left,j=right;
while(i<j){
while(i<j && arrs[j]>=temp){
j--;
}
if(i<j){
int num = arrs[i];
arrs[i] = arrs[j];
arrs[j] = num;
i++;
}
while(i<j && arrs[i]<=temp){
i++;
}
if(i<j){
int num = arrs[j];
arrs[j] = arrs[i];
arrs[i] = num;
j--;
}
}
fastSort(arrs,left,i-1);
fastSort(arrs,i+1,right);
}
}
}
运行之后我发现一个问题,当数据用
1,2,3,4,5,6,0,7,8,9,10,0
的
时候结果是乱的,我研究了好久,没看出来是哪里的问题,还希望各位如果知道错误在哪里,望指出,小弟感激不尽。