1.冒泡排序算法(最基础的排序算法,每循环比较一次,则将最大(小)的数排在数据的首位或末位)

    

//冒泡排序
	public static void main(String[] args) {
		int[] nums={9,8,7,6,5,4,3,2,1};
		//让第i(num[0-nums.length-1])个数和后面的依次比较,如果后面的数比较小,则与i位置的数交换
		//i控制比数的下标
		for(int i=0;i<nums.length-1;i++){
			for(int j=i+1;j<nums.length;j++){
				if(nums[i]>nums[j]){
					int temp=nums[i];
					nums[i]=nums[j];
					nums[j]=temp;
				}
			}
		}
		for(int i=0;i<nums.length;i++){
			System.out.print(nums[i]+" ");
		}
	}

2.直接选择排序:

基本思想:每次从待排数组中选择第n小的数据放到排序列表的第n个位置,假如有n个数据待排,那么经过n-1次排序后,待排数组已经是有序的了

实现步骤解读:

a.从a[0]-a[N-1] 中选出最小的数据,然后与a[0]交换位置

b.从a[1]-a[N-1]中选出最小的数据,然后与a[1]交换位置(第一步结束后a[0]就是N个数中最小值)

c.从a[2]-a[N-1]中选出最小的数据,然后与a[2]交换位置(第二步结束后a[1]就是N-1个数中最小值)

以此类推,N-1 次排序后,待排数据就已经按照从小到大的顺序排列了

示例代码:


public class SelectSort {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		int[] array={78,85,21,47,12,34,1,9};
		selectSorter(array);
		System.out.println("排序后数据:");
		for (int i = 0; i < array.length; i++) {
			System.out.print(array[i]+" ");
		}
	}
	
	/**
	 * 直接选择排序
	 */
	public static void selectSorter(int[] array){
		
		int indexMin=0;
		int temp;
		for(int i=0;i<array.length;i++){
			//取出第i次比较的最小值
			int mixValue=Integer.MAX_VALUE;
			for(int j=i;j<array.length;j++){
				if(array[j]<mixValue){
					mixValue=array[j];
					indexMin=j;
				}
			}
			//与数组i位置上的值进行交换
			temp=array[i];
			array[i]=array[indexMin];
			array[indexMin]=temp;
		}
	}
}



3..二分法查找

1>二分查找又称为折半查找,优点是比较次数少,查找的速度快,平均性能好;缺点是要求待查表为有序表,且插入删除困难,适用于不经常变动而查找频繁的有序列表

2>查找过程:首先假设表中元素是按升序排列的,将表中间位置记录的关键字与查找关键字比较,如果两者相等则查找成功;否则利用中间位置记录将表分成前后两个子表,如果中间记录位置的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程直到找到满足条件的记录。代码如下:


public static void main(String[] args) {
		int[] nums={0,1,2,3,4,5,6,7,8,9};
		int start=0;//起始位置
		int end=nums.length-1;//结束位置
		int mid=0;//中间位置
		int find=0;//待查找的数
		System.err.println("请输入要查找的数:");
		Scanner scanner=new Scanner(System.in);//输入数据
		find=scanner.nextInt();
		do{
			mid=(start+end)/2;//初始化中间位置
			if(find==nums[mid]){
				System.out.println("查找成功!"+find+" 在数组中所在位置是:"+mid);
				break;
			}else if(find>nums[mid]){
				start=mid+1; //所要查找的数据比中间位置的数据大,则在后半部分查找,起始位置改为中间位置+1
			}else if(find<nums[mid]){
				end=mid-1;	 //所要查找的数据比中间位置的数据小,则在前半部分查找,结束位置改为中间位置-1
			}
			
		}while(start<=end);
		if(start>end){
			System.out.println("数组中不包含你所要查找的数据:"+find);
		}