排序算法:冒泡、选择、二分查找

 

 

1、冒泡排序

 

基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两

相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。

 

实现代码:

import java.lang.String;

public class BubbleSort{
	public static void main(String[] args)
	{
		int[] a ={46,38,97,76,13,27,49,78,34,12,64,1,8};
		System.out.println("排序前:");
		for(int i=0;i < a.length;i++)
		{
			System.out.println(a[i]+" ");
		}
		
		//冒泡排序
		for(int i=0; i<a.length-1;i++)
		{
			//从头至一直遍历到沉底数前为止
			for(int j=0;j<a.length-i-1;j++)
			{
				if(a[j]>a[j+1])
				{
					int temp=a[j];
					a[j]=a[j+1];
					a[j+1]=temp;
				}
			}
		}
		
		System.out.println();
		System.out.println("排序之后:");
		for(int i=0;i<a.length;i++)
		{
			System.out.println(a[i] +" ");
		}
	}
}


 

 

2、选择排序

 

基本思想:在要排序的一组数中,选出最小的一个数与第一个位置的数交换;然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一

个数比较为止。

 

实现代码:

import java.lang.String;


public class SelectOrder{
	
	public static void main(String[] args)
	{
		int[] a ={46,38,97,76,13,27,49,78,34,12,64,1,8};
		System.out.println("排序前:");
		for(int i=0;i < a.length;i++)
		{
			System.out.println(a[i]+" ");
		}
		//简单选择排序
		for(int i=0;i<a.length;i++)
		{
			int minVal = a[i];  //最小数的值
			int minIndex = i;  //最小数的索引
			
			//找最小数的值和其位置
			for(int j=i+1;j<a.length;j++)
			{
				if(a[j]<minVal)
				{
					minVal=a[j];
					minIndex=j;					
				}
			}
			
			a[minIndex]=a[i];   //将最小数所在位置的值用a[i]来替换
			a[i]=minVal;       //将最小值放在a[i]处
		}
		System.out.println();
		System.out.println("排序之后:");
		for(int i=0;i<a.length;i++)
		{
			System.out.println(a[i] +" ");
		}
	}
	
}


 

3、二分查找

 

基本思想:开始时用第一个数索引与最后一个数索引的和除以2,得到的索引值对应的值与待查找的数作比较,如果大于待查找的数就将最后一个数的索引值减1,然后重新计算第一个数的索引与减1后的数的索引之和除以2对应的值和待查找数比较……

 

代码实现:

import java.lang.String;

public  class benaryserch{
	
	public static void main(String[] args)
	{
		int[] a={2,12,34,45,52,56,66,79,89};
		for(int i=0;i<a.length;i++)
		{
			System.out.println(a[i]+" ");
		}
		
		benaryserch s =new benaryserch();
		int num=s.search(a,45);
		System.out.println("二分查找结果"+ num);
		
	}
	
	public int search(int[] number,int des)
	{
		int low=0;
		int upper=number.length-1;
		while(low<=upper)
		{
			int mid=(low+upper)/2;
			if(number[mid]<des)
				low=mid+1;
			else if(number[mid]>des)
				upper=mid-1;
			else
				return mid;
			
		}
		return -1;
	}
}


 

 

 

你可能感兴趣的:(排序算法:冒泡、选择、二分查找)