概述
一、冒泡排序
①通过比较数组中相邻的两个元素的大小,如果前一个数比后一个数大,我们就让它们交换(交换是通过再一次引入一个新的变量实现的)
②每一大轮结束时,都会产生一个最大的或者是最小的数(比如第一大轮就是拿数组的第一个数进行循环操作)
③下一大轮可以少一次排序
下面是代码的实现
for (int i = 0; i < arr.length - 1; i++) { //外层循环:是我们要循环的轮数 for (int j = 0; j < arr.length - 1 - i; j++) { //内层循环:交换元素 if (arr[j] > arr[j + 1]) { //这种判断是从小到大排的方式,改变条件就能变成从大到小排列 int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } }
优化部分:当一个数组在没有执行完循环之前就已经排好序了,那么为了使时间更加优化,可以采用下面的方法
for (int i = 0; i < arr.length - 1; i++) { boolean isFlag = false; //新增一个boolean型的变量,当不需要排序时,直接跳出内层循环 for (int j = 0; j < arr.length - 1 - i; j++) { if (arr[j] > arr[j + 1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; isFlag = true; } if (isFlag == false){ break; } } }
二、选择排序
①首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。
②再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
③重复第二步,直到所有元素均排序完毕。
下面是代码的实现
for (int i = 0; i < arr.length - 1; i++) { //外层循环依旧是循环的轮数 int min = i; for (int j = i + i; j < arr.length; j++) { //让i与其他的剩下的所有数进行比较 if (arr[j] < arr[min]) { min = j; } } //如果每次比较出现了新的最小的数,就交换元素 if (min != i) { int temp = arr[i]; arr[i] = arr[min]; arr[min] = temp; } }
三、插入排序
①将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。
②从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)
for (int i = 1;i < arr.length;i++){ // 从下标为1的元素开始选择合适的位置插入,因为下标为0的只有一个元素,默认是有序的 int temp = arr[i]; // 记录要插入的数据,temp只是一个临时变量用来储存数的 int j = i; // 从已经排序的序列最右边的开始比较,找到比其小的数 while (j>0 && temp < arr[j-1]){ arr[j] = arr[j-1]; j--; } // 存在比其小的数,插入 if (i!=j){ arr[j] = temp; } } for (int k = 0;k < arr.length;k++){ System.out.print(arr[k]+" "); }
最后
以上就是阔达故事为你收集整理的三大排序的总结的全部内容,希望文章能够帮你解决三大排序的总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复