算法之排序
我用python实现的冒泡排序是双指针,这里虽然也是双指针,但是flag == 0,可以退出循环我不理解
选择排序python用的是技巧min()函数和切片
java么求初每一次循环索引的最小值(这里的技巧很厉害),然后再覆盖赋值
public class suanfa {
public static void main(String[] args) { //直接写main编译器就自动帮你加上了
suanfa bubble = new suanfa(); //把这整个类赋值给sort变量
//java赋值给变量一般数据类型时候都要加数据类型,指定大小空间;除了上方的类等赋值,方法赋值也要
int[] array = {2,5,1,6,4,9,8,5,3,1,2,0};
int[] arr = {2,5,1,6,4,9,8,5,3,1,2,0};
int[] sort = bubble.sort(array);//类调用类中的方法
int[] sort1 = bubble.select(arr);//选择排序
for(int num:sort){
System.out.print(num+"\t");
}
System.out.println("_------分割线------—_");
for(int num:sort1){
System.out.print(num+"\t");
}
}
//冒泡排序
public int[] sort(int[] array){
int temp = 0;
// 外层循环,他决定一共走几趟
//-1为了防止溢出
for(int i = 0;i<array.length-1;i++){
int flag = 0; //通过符号位可以减少无谓的比较,如果已经有序了,就退出循环
// 内层循环,他决定每趟走一次
for(int j =0;j<array.length-i-1;j++){
//如果后一个大于前一个,则换位
if(array[j+1]>array[j]){
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
flag=1;
}
}
//为什么flag == 0,可以退出循环
if(flag==0){
break;
}
}
return array;
}
//选择排序
public int[] select(int arr[]){ //arr也可以等价于array
int temp = 0;
for(int i = 0;i<arr.length-1;i++){
//不必python中的range(len(arr)),他不取最后一项,
//java这里要标记清楚
// 认为目前的数就是最小的,记录最小数的下标
int minIndix = i;
for(int j=i+1;j<arr.length;j++){
if(arr[minIndix]>arr[j]){// 修改最小值的下标
minIndix = j;
}
}
// 当退出for就找到这次的最小值,就需要交换位置了
if(i!=minIndix){ //交换当前值和找到最小值的位置
temp = arr[i];
arr[i] = arr[minIndix];
arr[minIndix] = temp;
}
}
return arr;
}
}
~~
努力拼搏吧,不要害怕,不要去规划,不要迷茫。但你一定要在路上一直的走下去,尽管可能停滞不前,但也要走。