java-数组-增删改查

问题一:找出最大值(最大或最小)

         法一:用一个中间变量(默认是a[0])与数组每一个值比较,大的就赋值给中间变量

         法二:找出最大值的下标,用一个下标变量(默认‘0’)与数组的每个值比较,大的就赋该值的下标给变量

问题二:数组的查找操作。(二分法的应用:对于有序的序列)

        练习:有一个有序的数组,想要将一个元素插入到该数组中,
                还要保证该数组是有序的。如何获取该元素在数组中的位置。
                即在[1,3,6,8,9],插入一个7,而且保持有序

 1 //利用二分法查找
 2     //二分法:重点以中间值开始比较,key大的话以中间值后一位为起点开始查找,相反类推
 3     //key小的以中间值前一位为起点开始找
 4     public static int halfSearch(int[]arr,int key)
 5     {  
 6         //设置要查询范围的首和尾的下标
 7         int s=0,e=arr.length-1;
 8         //设一个中间值下标,默认-1
 9         int h;
10         //当首小于尾时才循环,没有循环次数要求。所以用while
11          while(s<=e)
12        {
13             //中间变量下标, 
14               h=(s+e)/1;
15             if(arr[h]<key)
16             {
17                 s=h+1;//必须+1,以此为起点
18                 //System.out.println(h);
19             }
20             else if(arr[h]>key)
21             {
22                 e=h-1;//必须-1,以此为终点
23             }
24             else if(arr[h]==key)
25             {
26                 //第三种情况,两者相等,则跳出循环
27                 return h;
28             }
29             //System.out.println("dd");
30         }
31          //这里必须是s,不是h,因为while循环里一种情况是arr[h]==key,而另一种情况就是下面的
32         return s;
33      }

 

问题二:排序(从小到大)

        Java排序方法:1.冒泡排序。2.选择排序。3.插入排序。4.快速排序。

      1.冒泡排序法:

 1     //冒泡排序法:从a[0]开始,每个相邻的数比较,较大时,两者交换。
 2     //第一次将最大值交换到了最后一位,第二次交换到倒数第二位,以此类推
 3     //这里要从小到大排序
 4     public static void bubbleSort(int[]arr)
 5     {
 6         //首先一定是两次for循环
 7         for(int i=1;i<arr.length;i++)
 8         {
 9             for(int k=0;k<arr.length-i;k++)
10             {   
11                 //交换要用到中间变量
12                 int tmp;
13                 if(arr[k]>arr[k+1])
14                 {
15                     tmp=arr[k+1];
16                     arr[k+1]=arr[k];
17                     arr[k]=tmp;
18                 }
19              }
20           }
21   }

     2.选择排序

 1 //选择排序法:找出最大值,放在最后一位,再从剩下的数找最大值,以此类推
 2     //第一次循环,从0到n,用下标找出最小值,然后与最后一位(n)交换,
 3     //第二次循环,从0到n-1,找出最小值再与(n-1)位交换,以此类推
 4     //首先想到两次for循环!!!
 5     //这里是从大到小排列,
 6     public static void selectSort(int[]arr)
 7     {
 8          for(int i=1;i<arr.length;i++)
 9         {
10             //默认下标为0,每一次都从0开始与后面比较
11             int min=0;
12              
13             for(int k=0;k<arr.length-i;k++)
14             {
15                 //找出最小值
16                 if(arr[k+1]<arr[min])
17                     min=k+1;
18              }
19             //循环完后找出了最小值的下标
20             //与最后一位交换!!(交换必须想到用中间变量!!)
21             //System.out.print(arr[min]+"\t");
22             //中间变量用于交换
23             int tmp;
24             tmp=arr[arr.length-i];
25             arr[arr.length-i]=arr[min];
26             arr[min]=tmp;
27         }
28      }

   3.插入排序

 1 //插入排序法:以第一个数为始点,拿后面的第二个数比较,较大插入到它的后面,
 2     //否则前面,第三个数开始与前面的第二个比较,直到交换到比前面的数大
 3     //这里的插入实际就是交换值(位置)
 4     //这里从小到大排序
 5     public static void insertSort(int[]arr)
 6     {
 7         //进行n-1次的交换
 8         for(int i=1;i<arr.length;i++)
 9         {   
10             //从第一个和第二个开始比较插入
11             //比较次数依次增加
12             int tmp;
13             for(int k=i;k>0;k--)
14             {   
15                 //这里是从最后面的那个元素即i开始与前面比较的
16                 if(arr[i]<arr[k-1])
17                 {
18                     //实现交换
19                     tmp=arr[i];
20                     arr[i]=arr[k-1];
21                     arr[k-1]=tmp;
22                 //注意交换后,i即下标要改为交换后的位置的下标即k-1
23                     i=k-1;
24                 }
25                 //如果刚好最后一个大于倒数第二个,则不必循环了
26                 else break;
27              }
28          }
29    }

   4.快速排序

//快速排序法(挖坑填数+分治法):
    public static void quikSort(int []arr)
    {
         
    }

 

posted @ 2014-11-26 16:44  beyondbycyx  阅读(704)  评论(0编辑  收藏  举报