简单的三种排序法

/**
	 * 插入排序法 
	 *从第一个元素开始,该元素可以认为已经被排序
	 *取出下一个元素,在已经排序的元素序列中从后向前扫描 
	 * 如果该元素(已排序)大于新元素,将该元素移到下一位置,重复步骤3,直到找到已排序的元素小于或者等于新元素的位置,将新元素插入到该位置中;
	 * 重复步骤2。 
	 */

	public static void insertSort(int[] numbers) {
		int size = numbers.length, temp, j;
		for (int i = 1; i < size; i++) { // i从1开始是默认第一个为已经排序号的
			temp = numbers[i];
			for (j = i; j > 0 && temp < numbers[j - 1]; j--) {
				numbers[j] = numbers[j - 1];
			}
			numbers[j] = temp;
		}
	}

  

/** 
	 *冒泡排序法: 
	 * 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
	 *对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
	 * 针对所有的元素重复以上的步骤,除了最后一个。
	 * 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
	 *   
	 */ 
	public static void bubbleSort(int[] numbers) {
		int temp; // 记录临时中间值
		int size = numbers.length; // 数组大小
		for (int i = 0; i < size - 1; i++) {
			for (int j = i + 1; j < size; j++) {
				if (numbers[i] < numbers[j]) { // 交换两数的位置
					temp = numbers[i];
					numbers[i] = numbers[j];
					numbers[j] = temp;
				}
			}
		}
	}
	

  

/** 
	 * 选择排序法 : 
	 * 在未排序序列中找到最小元素,存放到排序序列的起始位置。
	 *再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾。以此类推,直到所有元素均排序完毕。
	 */  
	public static void selectSort(int[] numbers) {   
	    int size = numbers.length, temp;   
	    for (int i = 0; i < size; i++) {   
	        int k = i;   
	        for (int j = size - 1; j >i; j--)  {   
	            if (numbers[j] < numbers[k])  k = j;   
	        }   
	        temp = numbers[i];   
	        numbers[i] = numbers[k];   
	        numbers[k] = temp;   
	    }   
	}

  

posted @ 2018-11-29 11:06  想出国的咖啡  阅读(372)  评论(0编辑  收藏  举报