zoukankan      html  css  js  c++  java
  • 面试中常常问的三种简单排序方法

    /**
     * 三种简单的排序
     * 本类中全部举例都是依照从小到大进行排序
     * @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]+"	");
    			}
    			System.out.println();
    		}
    		System.out.print("冒泡排序终于排序的结果:");
    		for(int i=0;i<score.length;i++){
    			System.out.print(score[i]+"	");
    		}
    		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]+"	");
    			}
    			System.out.println();
    			
    		}
    		System.out.print("选择排序终于排序的结果:");
    		for(int i=0;i<score.length;i++){
    			System.out.print(score[i]+"	");
    		}
    		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]+"	");
    		}
    		System.out.println();
    	}  
    	
    }
    

  • 相关阅读:
    CF11C How Many Squares?
    CF3D Least Cost Bracket Sequence
    P4106 [HEOI2014]逻辑翻译
    吉大第二届青云杯复赛第6题
    2017六省联考部分题目整理【期末考试,寿司餐厅,组合数问题,分手是祝愿】
    CF578D LCS Again
    P5072 [Ynoi2015]盼君勿忘
    P3232 [HNOI2013]游走
    P6154 游走
    P4648 [IOI2007] pairs 动物对数
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4353727.html
Copyright © 2011-2022 走看看