标题图
数组的综合应用
数组的综合应用.png
// 打印数组public static void printArray(int[] arr){ for(int x=0;x<arr.length;x++) { if(x!=arr.length-1){ System.out.print(arr[x]+","); }else{ System.out.print(arr[x]); } } }
数组转字符串
// 数组转换成为字符串// 结果返还为字符串,参数为数组public static String toString (int[] arr){ // 定义字符串变量 String temp = "["; for(int x = 0; x<arr.length; x++){ // 判断是否为最后一位元素 if(x != arr.length - 1){ temp = temp + arr[x] + ","; }else{ temp = temp + arr[x] + "]"; } } }
public static String getWeek(int num){ String[] weeks = { "1", "2", "3", "4", "5", "6", "7" }; if(num>7 || num<1){ return num + "没有对应的星期"; } return weeks[num]; }
选择排序
选择排序是第一个人和后续排序的人进行比较,若第一个人大于第二个人,就进行交换,那么这时第一人就是最小的,然后这时的第一个人和第三个人进行比较,若这时的第一个人大于第三个人,就进行交换位置,这时第一个人又换人了,也变得更小了,就这样,把剩下的人以这种方法进行比较,直到最后,第一轮结束,在第一位的就是最小的值。
这种就是排序算法,比如有6个人,第一轮要进行5次比较。小的值往前跑嘛。
//第一轮 for(int index=1;index<arr.length;index++) { if(arr[0]>arr[index]) { int temp = arr[0]; arr[0] = arr[index]; arr[index] = temp; } } print(arr); //第二轮 for(int index=2;index<arr.length;index++) { if(arr[1]>arr[index]) { int temp = arr[1]; arr[1] = arr[index]; arr[index] = temp; } } print(arr); //第三轮 for(int index=3;index<arr.length;index++) { if(arr[2]>arr[index]) { int temp = arr[2]; arr[2] = arr[index]; arr[index] = temp; } } print(arr); //第四轮 for(int index=4;index<arr.length;index++) { if(arr[3]>arr[index]) { int temp = arr[3]; arr[3] = arr[index]; arr[index] = temp; } } print(arr); //第五轮 for(int index=5;index<arr.length;index++) { if(arr[4]>arr[index]) { int temp = arr[4]; arr[3] = arr[index]; arr[index] = temp; } } print(arr); //第六轮没有,我们arr.length=6举例 //int index = 6;index<arr.length; false
优化:
public static void selectionSort(int[] arr) { for(int count=1;count<arr.length;count++) { for(int index=count;index<arr.length;index++) { if(arr[count-1]>arr[index]) { int temp = arr[count-1]; arr[count-1] = arr[index]; arr[index] = temp; } } }
for(int x = 0;x<arr.length-1;x++) { for(int y=x+1;y<arr.length;y++){ if(arr[x]>arr[y]){ int temp = arr[x]; arr[x] = arr[y]; arr[y] = temp; } } }
冒泡排序
为什么这个排序要叫冒泡呢?为什么不叫其他名词呢?
其实这个取名是根据排序算法的基本思路命名的,见名知意,冒泡排序,就是想泡泡在水里一样,在水里大的泡泡先浮出水面,就是大的先排出来,最小的最慢排出。
冒泡排序,是对排序的各个元素从头到尾依次进行相邻的大小比较,比如你是队长,在你的面前有一排人,你要将其进行排序,依次按照从小到大排序。
怎么理解最大的值被排除,你是队长,你对面前的一群人看不惯,进行排序,从左到右开始,第一个和第二个进行比较,大的那个就被挑出来,与第三个进行比较,接下来就是依次按照这个方法比较,就能把那个最大的值,最高的给挑出来不是,这就是第一轮的比较。
接下来,最大的就不用跟他比较了,上面所述,在排序时,你面前的人,是不能乱动的,一旦比较哪个大,两者就换位,如果第一比第二个小,就是第二个大时,两者不用换位,第二个就与第三个进行比较。
依照这个方法,两两比较,大的都被排到了最后,那么一旦排完,是不是都依照从小到大,(从低到高)的顺序在你面前排好了。
代码示例
我们用索引下标来解释
//第一轮 for(int index=0;index < arr.length-1; index++){ //相邻两个比较 if(arr[index] > arr[index+1]){ int temp = arr[index]; arr[index] = arr[index+1]; arr[index+1] = temp; } } print(arr); for(int index=0;index < arr.length-2;index++){ //这里arr.length-2,为什么比上一次多减了1呢? //因为第一轮,把最大的排出来了,就不用比较了,少了一个人 if(arr[index] > arr[index+1]){ int temp = arr[index]; arr[index] = arr[index+1]; arr[index+1] = temp; } } print(arr); for(int index=0;index < arr.length-3;index++){ if(arr[index]>arr[index+1]){ int temp = arr[index]; arr[index] = arr[index+1]; arr[index+1] = temp; } } print(arr);
优化:
for(int num=1;num<arr.length;num++){ for(int index=0;index<arr.length-num;index++){ if(arr[index]>arr[index+1]){ int temp = arr[index]; arr[index] = arr[index+1]; arr[index+1] = temp; } } }
for(int x=0;x<arr.length-1;x++){ for(int y=0;y<arr.length-1-x;y++){ if(arr[y]>arr[y+1]){ int temp = arr[y]; arr[y] = arrp[y+1]; arr[y+1] = temp; } } }
作者:达叔小生
链接:https://www.jianshu.com/p/f1afe5cab594