面试中经常问的三种简单排序方法

来源:互联网 发布:淘宝活动招商入口 编辑:程序博客网 时间:2024/04/27 07:49
/** * 三种简单的排序 * 本类中所有举例都是按照从小到大进行排序 * @author caohaicheng * @time   2014-07-24 */public class SortDemo {//int[] score={7,10,35,21,78,2,1,9};public static void main(String[] args) {SortDemo sd=new SortDemo();System.out.println("*********************************冒泡排序**********************************");//冒泡排序sd.BubbleSort();System.out.println("*********************************选择排序**********************************");//选择排序sd.selectSort();System.out.println("*********************************插入排序**********************************");//插入排序sd.insertSort();}/** * 冒泡排序:循环进行相邻的两个数比较,然后根据规则决定是否调换位置 */private  void BubbleSort() {int[] score={7,10,35,21,78,2,1,9};for(int i=1;i<score.length;i++){//最多比较N-1次,每比较一轮就将所参与比较的数的最大值蠕动到这些数的最后面/* * 第二次循环的j很关键,因为当第一轮比较结束,数组中的最大的那个值已经被放到最后一位了 * 第二轮的时候就不需要最后一个数字参与比较了,比较结束倒数第二大的数放在倒数第二的位置了 * 依次类推 ,最多比较N-1次就可以全部排序好。 */for(int j=0;j<score.length-i;j++){if(score[j]>score[j+1]){//两个元素互换位置int temp=score[j];score[j]=score[j+1];score[j+1]=temp;}}System.out.print("冒泡排序第"+i+"次排序结果:");for(int k=0;k<score.length;k++){System.out.print(score[k]+"\t");}System.out.println();}System.out.print("冒泡排序最终排序的结果:");for(int i=0;i<score.length;i++){System.out.print(score[i]+"\t");}System.out.println();}/** * 选择排序:顺序依次取出一个数与它后面的所有数进行比较,找出最小的然后交换位置 * 冒泡排序是跟相邻的两两比较,发现比他小就交换位置; 而选择排序是跟所有的都比较之后,确定了哪个最小,再交换位置 *  */private void selectSort(){int[] score={7,10,35,21,78,2,1,9};for(int i=0;i<score.length-1;i++){//没循环依次就找到了一个最小值,最多循环N-1次int minIndex=i;for(int j=i+1;j<score.length;j++){//跟后面的所有数进行比较,找出那个最小的if(score[minIndex]>score[j]){minIndex=j;//找到最小值的下标了}}//交换位置int temp=score[minIndex];score[minIndex]=score[i];score[i]=temp;System.out.print("选择排序第"+i+"次排序结果:");for(int k=0;k<score.length;k++){System.out.print(score[k]+"\t");}System.out.println();}System.out.print("选择排序最终排序的结果:");for(int i=0;i<score.length;i++){System.out.print(score[i]+"\t");}System.out.println();}/** * 插入排序:跟玩扑克牌的时候抓牌"码牌"类似,我们抓第一张牌不用排序,第二张牌要与第一张牌进行比较,如果小于第一张牌,那么就 * 将第一张牌移动到第2的位置上 * 以后依次抓牌,与手牌从前往后依次比较,当发现小于某张手牌的时候就将抓到的牌放在该位置,该位置后的牌依次后移。 *  */private void insertSort(){int[] score={7,10,35,21,78,2,1,9};for(int i=1;i<score.length;i++){int temp=score[i];int j=i-1;while(j>=0 && score[j]>temp ){score[j+1]=score[j];j--;}score[j+1]=temp;}System.out.print("插入排序最终排序的结果:");for(int i=0;i<score.length;i++){System.out.print(score[i]+"\t");}System.out.println();}  }

2 0
原创粉丝点击