`
hpjianhua
  • 浏览: 235272 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类

冒泡,选择,插入排序 java版

阅读更多
公共代码交换两个数的方法:
	/**
	 * 交换两个数的方法
	 * @param data 交换的数组
	 * @param i	位置i的数组下标
	 * @param j 位置j的数组下标
	 */
	public static void swap(int[] data, int i,int j){
		//	当只有是不同一位置的两个数才进行交换
		if(i!=j){
			 int temp = 0;
			 temp = data[j];
			 data[j] = data[i];
			 data[i] = temp;
		}
	}
	

1.插入排序:
思想:每步将一个待排序的对象,按其关键码大小,插入到前面已经排好序的一组对象的适当位置上,直到对象全部插入为止。

代码实现:
	
	/**
	 * 插入排序算法
	 * 每进行一次排序,就需要将要比较的数与有序的序列进行一一对比
	 * @param data
	 * @param n
	 */
	public static void insertion(int[] data, int n){
		for(int i = 0 ; i < data.length;i++){
			for(int j = 0 ; j<i;j++){
				if(data[i]<data[j]){
					swap(data,i,j);
				}
			}
			System.out.println("第"+i+"趟:"+Arrays.toString(data));
		}
	}
	

2.选择排序:
思路简单:每经过一趟比较就找出一个最小值,与待排序列最前面的位置互换即可。
——首先,在n个记录中选择最小者放到r[1]位置;然后,从剩余的n-1个记录中选择最小者放到r[2]位置;…如此进行下去,直到全部有序为止。
优点:实现简单
缺点:每趟只能确定一个元素,表长为n时需要n-1趟
前提:顺序存储结构


	/**
	 * 选择排序算法
	 * 每经过一趟比较就找出一个最小值,与待排序列最前面的位置互换即可
	 * @param data
	 * @param n
	 */
	public static void select(int[] data, int n){
		for(int i = 0 ; i < data.length; i++){
			int min = i;
			for (int j = i+1; j<data.length; j++){
				if(data[j]<data[min]){
					min = j;
				}
			}
			if(i!=min){
				swap(data,min,i);
			}
			System.out.println("第"+i+"趟:"+Arrays.toString(data));
		}
	}




冒泡排序:
基本思路:每趟不断将记录两两比较,并按“前小后大”(或“前大后小”)规则交换。(逆序则交换)
优点:每趟结束时,不仅能挤出一个最大值到最后面位置,还能同时部分理顺其他元素;一旦下趟没有交换发生,还可以提前结束排序。
前提:顺序存储结构
	/**
	 * 冒泡排序算法
	 * 每次都是进行相邻两个数的比较,每比较一次,比较的个数就变少一个
	 * @param data
	 * @param n
	 */
	public static void bubble(int[] data, int n){
		for(int i = 1; i <=data.length; i++){
			for(int j = 0; j<(data.length-i);j++){
				if(data[j]>data[j+1]){
					swap(data,j,j+1);
				}
			}
			System.out.println("第"+i+"趟:"+Arrays.toString(data));
		}
	}

0
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics