数组的综合应用
数组的综合应用. 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;
- }
- }
- }
二分查找, 折半查找
什么是二分查找, 折半查找呢? 就是我说一个数, 你来猜, 你答一个数, 我说大了, 或小了, 直到找到为止.
- public static int searchKey(int[] arr, int key){
- for(int x=0;x<arr.length;x++){
- if(arr[x] == key){
- rerurn x;
- }
- return -1;
- }
- }
二分
- public static int binarySearch(int[] arr, int key){
- int max,min,mid;
- min = 0;
- max = arr.length - 1;
- mid = (max+min)>>1;
- while(arr[mid] != key){
- if(key>arr[mid]){
- min = mid + 1;
- }else if(key<arr[mid])
- max = mid - 1;
- mid = (max+min)>>1;
- }
- return mid;
- }
- }
- public static int binarySearch(int[] arr, int key){
- int max, min , mid;
- min = 0;
- max = arr.length - 1;
- while(min <= max){
- mid = (min+max)>>1;
- if(key>arr[mid]){
- min = mid + 1;
- }else if(key < arr[mid])
- max = mid - 1;
- } else {
- return mid;
- }
- return -1;
- }
二维数组
格式:
- int[][] arr = new int[2][3];
- int[][] arr = { {3,5,6}, {33,44,66}, {23,21,6} };
- for(int x=0; x<arr.length; x++){
- for(int y=0; y<arr[x].length; y++){
- sum += arr[x][y];
- }
- }
- public static void revese(int[] arr){
- for(int start=0, end = arr.length-1; start<end; start++,end--){
- swap(arr,start,end);
- }
- }
- public static void swap(int[] arr, int a, int b){
- int temp=arr[a];
- arr[a] = arr[b];
- arr[b] = temp;
- }
结语
本文主要讲解 Java 语言基础 - 讲解数组的综合应用
下面我将继续对 Java, Android 中的其他知识 深入讲解 , 有兴趣可以继续关注
来源: http://www.jianshu.com/p/f1afe5cab594