想想已经和Java打了五六年的交道了,而越是时间越长,那些基本的东西就差不多都忘了差不多,今天碰巧看到很常见的三种Java算法,还是抽一点时间用自己的方式解释给自己听,然后彻底吸收一下,免得日后有人玩笑考我,我不会,太丢人。。。。
啥是冒泡排序、选择排序和插入排序。
个人YY开始了:
冒泡排序
相邻的数字两两进行比较
按照[从小到大] 或者[从大到小] 的顺序进行交换
这样一趟过去后,[最大或最小]的数字被交换到了最后一位
然后再从头开始进行两两比较交换,直到倒数第二位时结束 。
即最先排好的是后面的位置~,而排好队的最后那几个数在每新开始的一轮排序中都不管啦
举个例子好了,比如一串数字升序排列:代码贴出来~
public void bubbleSort(int[] a) {
for (int i = 1; i < a.length; i++) {// 有几个数就需要来几个轮回
for (int j = 0; j < a.length - i; j++) {//排好的后几个就不管啦
if (a[j] > a[j + 1]) {
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}
选择排序
可以按照[从小到大] 或者[从大到小] 的顺序进行交换
我们就说从[从小到大] 的排序吧,首先呢,找出序列中最小的数去占了第一个位置,
即最先排好的就是排头~,而排好队的前面那几个数在每新开始的一轮排序中都不管啦
举个例子好了,比如一串数字升序排列:代码贴出来~
public void selectSort(int[] a) {
for (int i = 0; i < a.length - 1; i++) {//领出第一个
int k = i;
for (int j = i + 1; j < a.length; j++) {//排好的就不管啦
if (a[k] > a[j]) {//两两对比 大的滚后边去啦
k = j;
}
}
if (k != i) {//说明只换一次位置
int temp = a[i];
a[i] = a[k];
a[k] = temp;
}
}
}
插入排序
可以按照[从小到大] 或者[从大到小] 的顺序进行交换
每步将一个待排序的对象,按其排序码大小,插入到前面已经排好序的一组对象的适当位置上,直到对象全部插入为止。
举个例子好了,比如一串数字升序排列:代码贴出来~
public void insertSort(int[] a) {
for (int i = 1; i < a.length; i++) {
for (int j = i; j > 0; j--) {//当前位置的数和它前面排好的进行对比
if (a[j - 1] > a[j]) {//依次对比 寻找位置
int temp = a[j - 1];
a[j - 1] = a[j];
a[j] = temp;
} else {
break;
}
}
}
}