排序是一个非常重要的功能。
由于排序是如此常用的操作,在学习Arrays工具类及Collections工具类时,这两个工具类均提供了静态sort( )方法,可以直接调用方法实现排序。
虽然调用方法可以快速方便的实现排序,但在面试中面试官可能要求面试者自己编写代码实现数组排序,此时一般会采用冒泡排序及选择排序实现
冒泡排序的实现如下图所示
基本思想为:相邻元素两两比较,大的往后走。第一次完成后,最大值出现在最大索引处。第一次结束,最后那个元素不需要再参与比较。
代码实现为:
- <font face="Arial">public class bubbleSort {
- public bubbleSort(){
- int a[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51};
- int temp=0;
- for(int i=0;i<a.length-1;i++){
- for(int j=0;j<a.length-1-i;j++){
- if(a[j]>a[j+1]){
- 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]);
- }
- } </font>
复制代码 由于冒泡排序每一轮中每次比较都会改变比较者与被比较者的位置(索引改变),比较而言选择排序在每轮比较中仅仅改变了被比较者的位置,而比较者的位置不变,可消耗较少的资源实现排序
选择排序的实现如下图所示:
基本思想为:每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。每次比较仅做一次交换。
代码的实现为:- public class selectSort {
-
- public selectSort(){
-
- int a[]={1,54,6,3,78,34,12,45};
-
- int position=0;
-
- for(int i=0;i<a.length;i++){
-
-
-
- int j=i+1;
-
- position=i;
-
- int temp=a[i];
-
- for(;j<a.length;j++){
-
- if(a[j]<temp){
-
- temp=a[j];
-
- position=j;
-
- }
-
- }
-
- a[position]=a[i];
-
- a[i]=temp;
-
- }
-
- for(int i=0;i<a.length;i++)
-
- System.out.println(a[i]);
-
- }
-
- }
复制代码 排序的方法有很多种,冒泡与选择排序效率并不算高,但容易理解。而JDK 1.7后,Arrays.sort()封装了快速排序DualPivotQuicksort(具体可参考:http://www.tuicool.com/articles/BfY7Nz)
此外常见的一些排序,如希尔排序等诸君亦可在闲暇时参阅学习。
|
|