java 算法--排序

来源:互联网 发布:数据库系统原理怎么学 编辑:程序博客网 时间:2024/06/07 00:27

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);}

原创粉丝点击