java-排序法和常用的算法

1.冒泡排序法

 1 //升序排序法
 2     public static void bubbleSort(int []arr)
 3     {  
 4         //发生n-1次循环
 5         for(int i=1;i<arr.length;i++)
 6         {
 7 
 8             for(int j=0;j<arr.length-i;j++)
 9             {
10                if(arr[j+1]<arr[j])
11                 {
12                    int tmp;
13                    tmp=arr[j+1];
14                    arr[j+1]=arr[j];
15                    arr[j]=tmp;
16                 }
17             }
18         }
19     }

2.选择排序法

 1  //第一次,找出最值,与最后一位交换
 2  //第二次,找出最值,与倒数第二位交换
 3     public static void selectSort (int []arr)
 4     {
 5        //找出最大数的下标,与最后一位交换
 6        for(int i=1;i<arr.length;i++)
 7         {   
 8             //下标默认是从0开始
 9             int index=0;
10             for(int j=0;j<arr.length-i;j++)
11             {
12                 if(arr[j+1]>arr[index])
13                 {
14                    index=j+1;
15                 }
16             }
17             //找到最大值下标,与最后一位交换
18             int tmp;
19             tmp=arr[index];
20             arr[index]=arr[arr.length-i];
21             arr[arr.length-i]=tmp;
22         }
23     }

3.插入排序法

 1 //从第一个值开始,前面的值与前面的比较,小的话插入到它的前面
 2 //注意:如果出现不比前面的数小,则不必循环,可以直接跳出
 3     public static void insertSort(int []arr)
 4     {
 5         for(int i=0;i<arr.length-1;i++)
 6         {
 7    //注意:初值是后面那个数即i+1,而因为有可能交换到arr[0]位置,所以j>0
 8            for(int j=i+1;j>0;j--)
 9            {
10                if(arr[j]<arr[j-1])
11                {
12                    int tmp;
13                    tmp=arr[j];
14                    arr[j]=arr[j-1];
15                    arr[j-1]=tmp;
16                   
17                }
18                else
19                 break;
20                //如果出现不比前面的数小,则不必循环,可以直接跳出
21             }
22         }
23     }

4.二分法查找

 1  public static int getIndex(int[] arr,int key)
 2     {
 3         int min = 0,max = arr.length-1,mid;
 4 
 5         while(min<=max)
 6         {
 7             mid = (max+min)>>1;
 8 
 9             if(key>arr[mid])
10                 min = mid + 1;//必须+1,以此为起点
11             else if(key<arr[mid])
12                 max = mid - 1;//必须-1,以此为终点
13             else
14                 //两者相等,则返回值跳出循环
15                 return mid;
16         }
17 //这里必须是s,不是h,因为while循环里一种情况是arr[h]==key,
18 //而另一种情况就是下面的
19          return min;
20     }

 

posted @ 2014-12-22 18:51  beyondbycyx  阅读(178)  评论(0编辑  收藏  举报