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 }