排序算法都是处理数据的一些思想,代码是次要的,重点还是学习如何处理问题的思想。排序一个最基本的前提肯定是比较后交换,所以基本在每个算法里都有swap(交换)的过程,这里都借助temp来实现。
这里总结一部分排序算法,算法深似海,多了我自己总结完也记不住。只有3+1种。
冒泡排序都学恶心了,这里不做过多讲解了。
void bubbleSort(int[] array){
for (int i = 0;i<array.length-1;i++){
for (int j = i+1;j<array.length;j++){
if (array[i]>array[j]){
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
}
快速排序相信大家也不陌生,思想就是定一个判断标准,把比它小的放到前面,比它大的放到后边,在对前后两部分分别这样排序。
void quickSort(int[] array,int start,int end){
if (start<end){
int flag = array[start];
int i = start;
for (int j = start+1;j<end;j++){
if (flag>array[j]){
++i;
int temp = array[i];
array[i] = array[end];
array[end] = temp;
}
array[start] = array[i];
array[i] = flag;
quickSort(array,start,i-1);
quickSort(array,i+1,end);
}
}
}
插入排序我看过一个有趣的比较,好像打牌一样,每张牌插入到合适的位置,循环这样就可以得到最后一个排好序的结果。
void insertSort(int[] array){
for (int i = 1;i<array.length;i++){
int j = i+1;
int temp = array[i];
for (;j>0;j--){
if (array[j]>temp){
array[j+1] = array[j];
}else {
break;
}
}
array[j+1] = temp;
}
}
先学三种不嫌少,能敲出来就是一种进步。
最后为什么说是+1种,这种大家不用学啊,学了没有任何作用。
猴子排序(也有叫Bogo排序),目前看来是一种毫无用处的算法,主要思想就是把数字都随机打乱再循环验证顺序,直到反复打乱成排好顺序。也是一种不需要换位的排序。(这里代码我不敲了直接找一份复制粘贴了)
private static final Random random = new Random();
private static void bogoSort(int[] array) {
while (!isOrder(array)) {
for (int i = 0; i < array.length; i++) {
int randomPosition = random.nextInt(array.length);
int temp = array[i];
array[i] = array[randomPosition];
array[randomPosition] = temp;
}
}
}
private static boolean isOrder(int[] array) {
for (int i = 0; i < array.length - 1; i++) {
if (array[i] > array[i + 1]) return false;
}
return true;
其余的排序有缘再写吧。