Java冒泡排序与快速排序笔记
public class Sort {
public static void sort() {
Scanner input = new Scanner(System.in);
int sort[] = new int[10];
int temp;
System.out.println("请输入10个排序的数据:");
for (int i = 0; i < sort.length; i++) {
sort[i] = input.nextInt();
}
for (int i = 0; i < sort.length - 1; i++) {
for (int j = 0; j < sort.length - i - 1; j++) {
if (sort[j] < sort[j + 1]) {
temp = sort[j];
sort[j] = sort[j + 1];
sort[j + 1] = temp;
}
}
}
System.out.println("排列后的顺序为:");
for(int i=0;i<sort.length;i++){
System.out.print(sort[i]+" ");
}
}
public static void main(String[] args) {
sort();
}
}
public static int[] qsort(int arr[],int start,int end) { int pivot = arr[start]; int i = start; int j = end; while (i<j) { while ((i<j)&&(arr[j]>pivot)) { j--; } while ((i<j)&&(arr[i]<pivot)) { i++; } if ((arr[i]==arr[j])&&(i<j)) { i++; } else { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } if (i-1>start) arr=qsort(arr,start,i-1); if (j+1<end) arr=qsort(arr,j+1,end); return (arr); } public static void main(String[] args) { int arr[] = new int[]{3,3,3,7,9,122344,4656,34,34,4656,5,6,7,8,9,343,57765,23,12321}; int len = arr.length-1; arr=qsort(arr,0,len); for (int i:arr) { System.out.print(i+"\t"); } }/*//////////////////////////方式二////////////////////////////////*/更高效点的代码:public<TextendsComparable<?superT>>T[]quickSort(T[]targetArr,intstart,intend){inti=start+1,j=end;Tkey=targetArr[start];SortUtil<T>sUtil=newSortUtil<T>();if(start=end)return(targetArr);/*从i++和j--两个方向搜索不满足条件的值并交换**条件为:i++方向小于key,j--方向大于key*/while(true){while(targetArr[j].compareTo(key)>0)j--;while(targetArr[i].compareTo(key)<0&&i<j)i++;if(i>=j)break;sUtil.swap(targetArr,i,j);if(targetArr[i]==key){j--;}else{i++;}}/*关键数据放到‘中间’*/sUtil.swap(targetArr,start,j);if(start<i-1){this.quickSort(targetArr,start,i-1);}if(j+1<end){this.quickSort(targetArr,j+1,end);}returntargetArr;}/*//////////////方式三:减少交换次数,提高效率/////////////////////*/private<TextendsComparable<?superT>>voidquickSort(T[]targetArr,intstart,intend){inti=start,j=end;Tkey=targetArr[start];while(i<j){/*按j--方向遍历目标数组,直到比key小的值为止*/while(j>i&&targetArr[j].compareTo(key)>=0){j--;}if(i<j){/*targetArr[i]已经保存在key中,可将后面的数填入*/targetArr[i]=targetArr[j];i++;}/*按i++方向遍历目标数组,直到比key大的值为止*/while(i<j&&targetArr[i].compareTo(key)<=0)/*此处一定要小于等于零,假设数组之内有一亿个1,0交替出现的话,而key的值又恰巧是1的话,那么这个小于等于的作用就会使下面的if语句少执行一亿次。*/{i++;}if(i<j){/*targetArr[j]已保存在targetArr[i]中,可将前面的值填入*/targetArr[j]=targetArr[i];j--;}}/*此时i==j*/targetArr[i]=key;//应加判断/*递归调用,把key前面的完成排序*/this.quickSort(targetArr,start,i-1);/*递归调用,把key后面的完成排序*/this.quickSort(targetArr,j+1,end);//两个递归应加判断}
浙公网安备 33010602011771号