算法基础复习,选择排序和冒泡排序,快速排序,做个记录,已备查看。
//冒泡排序
public static void bubbleSort(int[] arr){
for(int i=0;i<arr.length-1;i++){//最多做n-1趟排序
//对当前无序区间进行排序(j的范围很关键,这个范围是在逐步缩小的)
for(int j=0;j<arr.length-1-i;j++){
if(arr[j]<arr[j+1]){ //把小的值交换到后面
int temp= arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
//冒泡排序优化版(大->小)
public static void bubbleSort2(int[] arr){
for(int i=0;i<arr.length-1;i++){//最多做n-1趟排序
Boolean finish=true;
//对当前无序区间进行排序(j的范围很关键,这个范围是在逐步缩小的)
for(int j=0;j<arr.length-1-i;j++){
if(arr[j]<arr[j+1]){ //把小的值交换到后面
int temp= arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
finish=false;
}
}
if(finish){
//一轮比较如果没有任何交换,所有所有顺序都正确排序了,结束排序
break;
}
}
}
//选择排序
public static void sort(int[] arr){
for(int i=0;i<arr.length-1;i++){
for(int j=i+1;j<arr.length;j++){
if(arr[i]<arr[j]){
int temp= arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
}
//快速排序
` public static void quick_sort(int[] aar, int begin, int end) {
if (end < begin) {
return;
}
int tem = aar[begin];
int i = begin;
int j = end;
while (i != j) {//i=j时跳出循环
while (aar[j] >= tem && j > i) {
//哨兵j需要查找到小于tem的数才停止
j--;
}
while (aar[i] <= tem && j > i) {
//哨兵i要查询大于tem的数才停止
i++;
}
if (j > i) {
int bp = aar[i];
aar[i] = aar[j];
aar[j] = bp;
}
}
//此时i==j
//把最左的与此时哨兵所在处交换,至此tem交换到了正确位置
aar[begin] = aar[i];
aar[i] = tem;
//左侧排序
quick_sort(aar, begin, i - 1);
//右侧排序
quick_sort(aar, i + 1, end);
}
``