冒泡排序
原理:临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,在深入学习更多排序算法后和在实际使用情况中,冒泡排序的使用还是极少的。它适合数据规模很小的时候,而且它的效率也比较低。
public int[] bubbleSort(int[] array){
for (int i = 0; i <array.length-1; i++) {
for (int j = 0; j <array.length-i-1; j++) {
if(array[j]>array[j+1]){
int temp;
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
return array;
}
}
选择排序
原理:每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。所以该方法的重点在于如何在未排序的算法中寻找最小的元素。假定array[i]最小,然后遍历未排序的序列,当找到小于array [i]的元素时,就认为该元素是最小值,记录该元素的位置。因此,内层循环结束时,就能找到未排序序列中的最小元素。
public int[] chooseSort(int[] array){
for (int i = 0; i <array.length; i++) {
int index = i;
for (int j = i; j <array.length ; j++) {
int minItem = array[index];
if(array[j]<minItem){
minItem = array[j];
index = j;
}
}
int temp;
temp = array[i];
array[i] = array[index];
array[index] = temp;
}
return array;
}
插入排序
插入排序的例子有点像打麻将,总是把抓来的牌放在合适的位置。在内存中,需要的是数组的移动。
如果,不小心移动错了,就不能实现排序,看一段错误的代码:for (int i = 0; i <array.length ; i++) {
int temp = array[i];
int index = i;
for (int j = i-1; j >=0 ; j--) {
if(array[j]>array[i]){
index = j;
array[j+1] = array[j];//挨个往后移
}else {
break;
}
}
array[index] = temp;//腾出待插入的位置
}
下面是正确的代码:
public int[] insertSort(int[] array){
for (int i = 0; i <array.length ; i++) {
int temp = array[i];
int index = i;
for (int j = i-1; j >=0 ; j--) {
if(array[j]>temp){
index = j;
array[j+1] = array[j];//挨个往后移
}else {
break;
}
}
array[index] = temp;//腾出待插入的位置
}
return array;
}
这是我根据自己的理解写的一些代码,想要真正理解需要结合生活中的例子,例如站队,打牌等等都是。同时,也可以动手画出排序的步骤。