冒泡排序、选择排序



public class MySort {
	
	
	
	/**
	 * 插入排序(小到大)
	 * @param arr
	 * @return
	 */
	public int[] insertSort(int[] arr) {

		
		for (int i = 1; i < arr.length; i++) {
			
			int copyNum = arr[ i ];	
			int targetIndex = i;	

			/*
			 * copyNumIndex>0看的是现在这个copyNumIndex是否已经越界了
			 * copyNum<arr[copyNumIndex-1])看复制出来的这个数是否小于本身前面的那个数
			 * 都满足,则证明没有还没找到插入的位置
			 */
			while (targetIndex>0 && copyNum<arr[ targetIndex - 1 ] ) {
				
				arr[ targetIndex ] = arr[ targetIndex - 1 ]; //让前面的那个数替换掉copyNum的本体
				targetIndex--;
			}

			arr[ targetIndex ] = copyNum;
		}

		return arr;

	}
	

	
	
	/**
	 * 选择排序
	 * @param arr
	 * @return
	 */
	public int[] selectSort(int[] arr) {
		
		for(int i=0; i<arr.length-1; i++) {
			
			//假设最小值
			int min = arr[i];
			int minIndex = i;
			
			for(int j=i+1; j<arr.length; j++) {
				
				if(min > arr[j]) {
					min = arr[j];
					minIndex = j;
				}
			}
			
			//如果循环过后没有变则跳过(减少交换操作)
			if(min == arr[i])
				continue;
			
			
			swap(arr, i, minIndex);
			
		}
		
		
		return arr;
		
	}

	
	/**
	 * 冒泡排序
	 * @param arr
	 * @return
	 */
	public int[] bubbleSort(int[] arr) {

		//控制次数
		for(int i=0; i<arr.length-1; i++) {
			
			for(int j=0; j<arr.length-(i+1); j++) {
				
				if(arr[j] > arr[j+1]) {
					swap(arr, j, j+1);
				}
			}
		}
		
		return arr;
	}
	
	/**
	 * 数值交换
	 * @param arr
	 * @param a	数组下标
	 * @param b	数组下标
	 */
	private void swap(int[] arr, int a, int b) {
		
		int temp = arr[b];
		arr[b] = arr[a];
		arr[a] = temp;
		
	}
	
	
	/**
	 * 打印数据
	 * @param arr
	 */
	public void printArray(int[] arr) {
		for (int i : arr) {
			System.out.print(i + "	");	
		}
	}
	
}




原文地址:https://www.cnblogs.com/tandi19960505/p/8645262.html