-
比较相邻的两个元素 如果第一个数比第二个数大 我们就交换它们之间的位置
-
每次排序都换产生一个较大的数和较小的数
话不多说,上代码!
public static void main(String[] args){ int[] a = {57, 89, 25, 49, 87, 32, 15, 1, 79, 64};//主函数里面 声明了一个无序数组 我们要将它升序排序 int[] sort = sort(a);//调用方法 输出我们排序好的数组 System.out.Println(sort(a)); } public static int[] sort(int[] a){ int temp = 0; //声明一个初始变量 交换位置不是 a=b b=a 得有个数先接住一个数 再赋予 for(int i = 0; i < a.length -1; i++){//外层循环 主要是循环次数 数组长度-1 是怕溢出 for(int j = 0; j < a.lengt -1 -i; j++){//里层循环 比较两个数之间 if(a[j+1] < a[j]){//来个判断 如果第二个数 跟第一个数比较 第二个数 小于 第一个数 temp = a[j];//那么,把第一个数存起来,因为升序的话 第二个数小于第一个数 第一个数肯定大对吧 a[j] = a[j+1]//第一个位置的数 大于 第二个位置的数 我们把它们互换 因为升序嘛 a[j+1] = temp//第二个数比第一个数小 第二个数是不是就该往前面走了 是不是就该放在第一个位置了 } } } return a; 返回数组a } 那么,我们这样的程序能不能优化呢?
public static int[] sort(int[] a){ int temp = 0; for(int i = 0; i < a.length -1; i++){ boolean flag = false;//注意 我们在这里通过 flag 标识位 进行判断 for(int j = 0; j < a.lengt -1 -i; j++){ if(a[j+1] < a[j]){ temp = a[j]; a[j] = a[j+1] a[j+1] = temp flag = true;// 程序能走到这里 说明上面if条件成立 } } if(flag == false){ break; //如果程序是false的话 说明上面都比较完了 因为如果还能比较的话 flag会是true false说明没条件了 完毕了 我们就该终止程序了 } } return a; 返回数组a }



