面試經常使用的4種數組排序

最近要離職了,正好項目作完,沒什麼事作就看看算法,數組的排序每次看完就忘記,此次記下來留着之後備用。java

這裏記錄了4種排序:快速排序、冒泡排序、選擇排序、插入排序,用java寫的。算法

一、快速排序數組

寫了2個小時才寫出來,我了個去,又從新梳理了一下,大體的方法以下:ui

	/**
	 * 快速排序
	 * @param array
	 * @param low
	 * @param high
	 */
	public static void quickSort(int[] array,int low,int high){
		//數組爲空時,不進行排序操做
		if(array == null || array.length == 0){
			return;
		}
		//若是low >= high,數據有誤,不進行操做
		if(low >= high){
			return;
		}
		//取中值
		int middle = low + (high - low)/2;
		int prmt = array[middle];
		
		//排序使得數組left<prmt 同時,right>prmt;
		int i = low,j = high;
		while(i <= j){
			while(array[i] < prmt){
				i++;
			}
			while(array[j] > prmt){
				j--;
			}
			
			if(i <= j){
				int temp = array[i];
				array[i] = array[j];
				array[j] = temp;
				i++;
				j--;
			}
			System.out.print("排序中:");
			printArray(array);
		}
		//對左邊部分進行處理
		if(low < j){
			quickSort(array,low,j);
		}
		//對右邊的部分進行處理
		if(high > i){
			quickSort(array,i,high);
		}
	}

快速排序過程以下:spa

排序前:9 2 10 7 3 7 4  
排序中:4 2 10 7 3 7 9  
排序中:4 2 7 7 3 10 9  
排序中:4 2 7 3 7 10 9  
排序中:2 4 7 3 7 10 9  
排序中:2 4 3 7 7 10 9  
排序中:2 3 4 7 7 10 9  
排序中:2 3 4 7 7 9 10  
排序中:2 3 4 7 7 9 10  
排序後:2 3 4 7 7 9 10

二、冒泡排序

寫成了一個方法,代碼以下:code

	/**
	 * 冒泡排序
	 * @param array
	 */
	public static void bubbleSort(int[] array){
		for(int i = 1;i<array.length; i++){
			System.out.println("排序序號" + i);
			for(int j = 0;j<array.length-i;j++){
				if(array[j]>array[j+1]){
					int temp = array[j];
					array[j] = array[j+1];
					array[j+1] = temp;
				}
				System.out.print("排序中:");
				printArray(array);
			}
		}
	}
冒泡排序過程以下:

排序前:9 2 10 7 3 7 4  
排序中:2 9 10 7 3 7 4  
排序中:2 9 10 7 3 7 4  
排序中:2 9 7 10 3 7 4  
排序中:2 9 7 3 10 7 4  
排序中:2 9 7 3 7 10 4  
排序中:2 9 7 3 7 4 10  
排序中:2 9 7 3 7 4 10  
排序中:2 7 9 3 7 4 10  
排序中:2 7 3 9 7 4 10  
排序中:2 7 3 7 9 4 10  
排序中:2 7 3 7 4 9 10  
排序中:2 7 3 7 4 9 10  
排序中:2 3 7 7 4 9 10  
排序中:2 3 7 7 4 9 10  
排序中:2 3 7 4 7 9 10  
排序中:2 3 7 4 7 9 10  
排序中:2 3 7 4 7 9 10  
排序中:2 3 4 7 7 9 10  
排序中:2 3 4 7 7 9 10  
排序中:2 3 4 7 7 9 10  
排序中:2 3 4 7 7 9 10  
排序後:2 3 4 7 7 9 10 



三、選擇排序blog

直接上代碼吧:排序

	/**
	 * 選擇排序
	 * @param array
	 */
	public static void selectSort(int[] array){
		int min_index;
		for(int i = 0; i<array.length-1; i++){
			min_index = i;
			for(int j = i+1;j<array.length; j++){
				if(array[j] < array[min_index]){
					int temp = array[j];
					array[j] = array[min_index];
					array[min_index] = temp;
				}
				System.out.print("排序中:");
				printArray(array);
			}
		}
	}
選擇排序過程以下:

排序前:9 2 10 7 3 7 4  
排序中:2 9 10 7 3 7 4  
排序中:2 9 10 7 3 7 4  
排序中:2 9 10 7 3 7 4  
排序中:2 9 10 7 3 7 4  
排序中:2 9 10 7 3 7 4  
排序中:2 9 10 7 3 7 4  
排序中:2 9 10 7 3 7 4  
排序中:2 7 10 9 3 7 4  
排序中:2 3 10 9 7 7 4  
排序中:2 3 10 9 7 7 4  
排序中:2 3 10 9 7 7 4  
排序中:2 3 9 10 7 7 4  
排序中:2 3 7 10 9 7 4  
排序中:2 3 7 10 9 7 4  
排序中:2 3 4 10 9 7 7  
排序中:2 3 4 9 10 7 7  
排序中:2 3 4 7 10 9 7  
排序中:2 3 4 7 10 9 7  
排序中:2 3 4 7 9 10 7  
排序中:2 3 4 7 7 10 9  
排序中:2 3 4 7 7 9 10  
排序後:2 3 4 7 7 9 10 

四、插入排序ip

繼續上代碼:class

	/**
	 * 插入排序
	 * @param array
	 */
	public static void insertSort(int[] array){
		for(int i = 1;i<array.length; i++){
			int temp = array[i];
			int j = i-1;
			
			while(j >= 0 && array[j] > temp){
				array[j+1] = array[j];
				j--;
				System.out.print("排序中:");
				printArray(array);
			}
			array[j+1] = temp;
			
		}
	}
插入排序過程以下:

排序前:9 2 10 7 3 7 4  
排序中:9 9 10 7 3 7 4  
排序中:2 9 10 10 3 7 4  
排序中:2 9 9 10 3 7 4  
排序中:2 7 9 10 10 7 4  
排序中:2 7 9 9 10 7 4  
排序中:2 7 7 9 10 7 4  
排序中:2 3 7 9 10 10 4  
排序中:2 3 7 9 9 10 4  
排序中:2 3 7 7 9 10 10  
排序中:2 3 7 7 9 9 10  
排序中:2 3 7 7 7 9 10  
排序中:2 3 7 7 7 9 10  
排序後:2 3 4 7 7 9 10 
最後包含四種排序方法的代碼也貼下吧:

public class SortUtil {

	public static void main(String[] args) {
		int[] x= {9,2,10,7,3,7,4};
		System.out.print("排序前:");
		printArray(x);
		
		int low = 0;
		int high = x.length-1;
		//快速排序
		quickSort(x,low,high);
		//冒泡排序
//		bubbleSort(x);
		//選擇排序
//		selectSort(x);
		//插入排序
//		insertSort(x);
		
		System.out.print("排序後:");
		printArray(x);
	}
	
	/**
	 * 插入排序
	 * @param array
	 */
	public static void insertSort(int[] array){
		for(int i = 1;i<array.length; i++){
			int temp = array[i];
			int j = i-1;
			
			while(j >= 0 && array[j] > temp){
				array[j+1] = array[j];
				j--;
				System.out.print("排序中:");
				printArray(array);
			}
			array[j+1] = temp;
			
		}
	}
	
	/**
	 * 選擇排序
	 * @param array
	 */
	public static void selectSort(int[] array){
		int min_index;
		for(int i = 0; i<array.length-1; i++){
			min_index = i;
			for(int j = i+1;j<array.length; j++){
				if(array[j] < array[min_index]){
					int temp = array[j];
					array[j] = array[min_index];
					array[min_index] = temp;
				}
				System.out.print("排序中:");
				printArray(array);
			}
		}
	}
	
	/**
	 * 冒泡排序
	 * @param array
	 */
	public static void bubbleSort(int[] array){
		for(int i = 1;i<array.length; i++){
			for(int j = 0;j<array.length-i;j++){
				if(array[j]>array[j+1]){
					int temp = array[j];
					array[j] = array[j+1];
					array[j+1] = temp;
				}
				System.out.print("排序中:");
				printArray(array);
			}
		}
	}
	
	/**
	 * 快速排序
	 * @param array
	 * @param low
	 * @param high
	 */
	public static void quickSort(int[] array,int low,int high){
		//數組爲空時,不進行排序操做
		if(array == null || array.length == 0){
			return;
		}
		//若是low >= high,數據有誤,不進行操做
		if(low >= high){
			return;
		}
		//取中值
		int middle = low + (high - low)/2;
		int prmt = array[middle];
		
		//排序使得數組left<prmt 同時,right>prmt;
		int i = low,j = high;
		while(i <= j){
			while(array[i] < prmt){
				i++;
			}
			while(array[j] > prmt){
				j--;
			}
			
			if(i <= j){
				int temp = array[i];
				array[i] = array[j];
				array[j] = temp;
				i++;
				j--;
			}
			System.out.print("排序中:");
			printArray(array);
		}
		//對左邊部分進行處理
		if(low < j){
			quickSort(array,low,j);
		}
		//對右邊的部分進行處理
		if(high > i){
			quickSort(array,i,high);
		}
	}
	
	
	
	/**
	 * 打印數組
	 * @param x 參數數組
	 */
	public static void printArray(int[] x){
		for(int a : x){
			System.out.print(a + " ");
		}
		System.out.println(" ");
	}

}
相關文章
相關標籤/搜索