`
i学霸
  • 浏览: 12686 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

I学霸官方免费教程二十八:Java排序算法之选择排序和冒泡排序

 
阅读更多

选择排序

步骤一、选取一组数据中起始位置(下标)上的数据,和其后的各个位置(下标)上数据进行比较;如果起始位置(下标)上的数据大(升序)或小(降序),就将两个位置上的数据进行交换;这样完成一轮比较之后,起始位置上的数据就是最小或最大了
步骤二、再次选取第二个位置上的数据,和其后各个位置上的数据进行比较。如此重复,就可将数据进行排序了。
实例:
package algorithm.sort;
/**
 * 演示选择排序算法
 * @author 学霸联盟 - 赵灿
 */
public class SelectionSortDemo {
	public static void main(String[] args) {
		//创建两个数组
		int[] arr1 = { 3, 5, 1, 4, 2 };
		/*
		 * 选择排序
		 * 顾名思义,从数组中按照顺序一个一个的选出来
		 * 升序排序:
		 * 第一步取出数组中下标为0的值,和后面每个值比较
		 * 如果小标为0值大于后面的值,则互换两个值,继续和后面的比
		 * 比完之后就可以保证下标为0的位置保持最小的值了
		 * 在取下标为1的值和后面的值一个一个比较,以此类推
		 */
		for (int i = 0; i < arr1.length - 1; i++) {
			//取到倒数第二个值即可,最后一个后面没有其他值了,也就无需比较了
			/*
			 * 内层循环拿后面的每一个值和外层循环取到的值比较
			 * 所以外层循环取下标为0处的值,这里第一次应该拿下标为1位置的值
			 * 外层循环取下标为1处的值,这里第一次应该拿下标为2位置的值
			 * 以此类推,得到j初始化时应该等于i+1
			 */
			for (int j = i+1; j < arr1.length; j++) {
				//判断大小
				if(arr1[i] > arr1[j]){
					//注意:这里交换的是数组中的值
					int temp = arr1[i];
					arr1[i] = arr1[j];
					arr1[j] = temp;
				}
			}
		}
		System.out.println("--- 选择排序法排序后 ---");
		for (int i = 0; i < arr1.length; i++) {
			System.out.print(arr1[i] + "  ");
		}
	}
}
运行结果:
--- 选择排序法排序后 ---
1  2  3  4  5  

冒泡排序

步骤一:选取一组数据中起始位置(下标)上的数据,和第二个位置上的数据进行比较,如果起始位置(下标)上的数据大(升序)或小(降序),就将两个位置上的数据进行交换;然后使用第二个位置上的数据,和第三个位置上的数据进行比较;第三个和第四个...直至最后一个,这样完成一轮比较,就使最后一个位置上的数据最大或最小
步骤二:仍然是选取起始位置上的数据,和第二个位置上的数据进行比较,直至倒数第二个数据;
以此类推,直至只剩下第一个和第二个数据进行比较,比较完成后结束。
实例:
package algorithm.sort;
/**
 * 演示冒泡排序算法
 * @author 学霸联盟 - 赵灿
 */
public class BubbleSortDemo {
	public static void main(String[] args) {
		//创建两个数组
		int[] arr1 = { 3, 5, 1, 4, 2 };
		/*
		 * 冒泡排序
		 * 顾名思义,像冒泡一样,越往上越大
		 * 升序排序:
		 * 第一步取出数组中下标为0的值,和后面相邻的值比较
		 * 如果后面的值小,交换两个值(相当于向上冒一个位置)
		 * 交换后继续用这个大的值和后面的值进行比较
		 * 以此类推,第一遍比较完成后,最大的值就在最后一个下标位置了
		 */
		for (int i = arr1.length - 1; i > 0 ; i--) {
			//外层循环的作用是标识冒泡的结束位置,结束位置是依次向前移动的
			/*
			 * 每次都从第一个值开始往上冒泡
			 * 知道冒至外层循环标识的结束位置为止
			 */
			for (int j = 0; j < arr1.length - 1; j++) {
				//判断相邻两个值大小
				if(arr1[j] > arr1[j + 1]){
					//注意:这里交换的是数组中的值
					int temp = arr1[j];
					arr1[j] = arr1[j + 1];
					arr1[j + 1] = temp;
				}
			}
		}
		System.out.println("--- 冒泡排序法排序后 ---");
		for (int i = 0; i < arr1.length; i++) {
			System.out.print(arr1[i] + "  ");
		}
	}
}
运行结果:
--- 冒泡排序法排序后 ---
1  2  3  4  5  
排序算法有很多很多,对于初学者,至少至少也要理解和熟练应用其中一种。












版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics