/*
一、冒泡排序:
int类型的数组:3,1,5,2,6
*/
public class Test01 { public static void main(String[] args){ int[] a={3,1,5,2,6,4}; //开始排序 for(int i=a.length-1;i>0;i--){ //System.out.println("i="+i); for(int j=0;j<i;j++){ //System.out.println("j="+j); if(a[j]>a[j+1]){ int temp; temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } //遍历 for(int i=0;i<a.length;i++){System.out.println(a[i]);} } } /* 分析: 1.原数据: 3,1,5,2,6,4 第一次循环:6 1,3,5,2,6,4 1,3,5,2,6,4 1,3,2,5,6,4 1,3,2,5,6,4 1,3,2,5,4,6 1,3,2,5,4 第二次循环:5 1,3,2,5,4 1,2,3,5,4 1,2,3,5,4 1,2,3,4,5 1,2,3,4 第三次循环:4 1,2,3,4 1,2,3,4 1,2,3,4 1,2,3 第四次循环:3 1,2,3 1,2,3 第五次循环:2 1,2 */
二、选择排序:
// 3 1 6 2 5
//算法:找出最小值,然后这个最小值和最前面的数据交换位置
public class Test02 { public static void main(String[] args){ int[] a={3,1,6,2,5}; //选择排序 for(int i=0;i<a.length;i++){ //System.out.print("i="+i+" "); //假设第一个数据是最小值 int min=i; for(int j=i+1;j<a.length;j++){ //System.out.print("j="+j+" "); if(a[min]>a[j]){ min=j; } } //System.out.println(); //交换位置 if(min !=i){ int temp; temp=a[i]; a[i]=a[min]; a[min]=temp; } } for(int i=0;i<a.length;i++){ System.out.print(a[i]); } } } /* 3 1 6 2 5 第一次循环: 1 3 6 2 5 3 6 2 5 第二次循环: 2 6 3 5 6 3 5 第三次循环: 3 6 5 6 5 第四次循环: 5 6 1----4 2----3 3----2 4----1 */
/*
三、二分法查找:
二分法查找是建立在已经排序的基础之上的。
2.以下程序分析从小到大排序
3.这个数组中没有重复的元素
1 3 5 9 11 13 56
以上是一个已经排好序的int类型的数组,要求快速找出
13这个元素的下标
1 3 5 9 11 13 56
int begin=0
int end=6
int mid=3
中间元素是9,9<13
begin=mid+1
end=6
mid=5
*/
public class Test03 { public static void main(String[] args){ int[] a={1,3,4,5,7,8,9,10,23,25,29}; int descelement=101; //要求从a数组汇总查找10这个元素的下标 int index=binarySearch(a,descelement);//如果找到则返回元素的下标,如果找不到统一返回-1 System.out.println((index==-1)?descelement+"不存在":descelement+"在这个数组的下标为"+index); } public static int binarySearch(int[] a,int descelement) { int begin = 0; int end = a.length - 1; while (begin<=end) { int mid = (begin + end) / 2; if (a[mid] == descelement) { return mid; } else if (a[mid] < descelement) { begin = mid + 1; } else if (a[mid] > descelement) { end = mid - 1; } } return -1; } }
四、SUN提供的工具
import java.util.Arrays; public class Test04 { public static void main(String[] args){ int[] a={3,1,5,2,6,4}; //排序 Arrays.sort(a); //输出 for(int i=0;i<a.length;i++){ System.out.println(a[i]); } //对排序之后的数据进行二分法查找 int index=Arrays.binarySearch(a,5); System.out.println(index); } }