我用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; } } ~~