排序算法不论在c语言,java,.net,php都很重要,冒泡排序、选择排序、插入排序是用的比较多的。个人觉得冒泡排序比较好理解,无非就是交换位置的过程,如下所示
public class BubbleSort{ public static void main(String[] args){ int score[] = {67, 69, 75, 87, 89, 90, 99, 100}; for (int i = 0; i < score.length -1; i++){ //最多做n-1趟排序 for(int j = 0 ;j < score.length - i - 1; j++){ if(score[j] < score[j + 1]){ //把小的值交换到后面 int temp = score[j]; score[j] = score[j + 1]; score[j + 1] = temp; } } System.out.print("第" + (i + 1) + "次排序结果:"); for(int a = 0; a < score.length; a++){ System.out.print(score[a] + "\t"); } System.out.println(""); } System.out.print("最终排序结果:"); for(int a = 0; a < score.length; a++){ System.out.print(score[a] + "\t"); } } }
但是像选择排序和插入排序理解起来会稍微困难一些,这2种排序和冒泡有很大的不同,先来看看插入排序
1.插入排序:
这种方式的排序主要就是为待插入的数找合适位置,之后插入变为新数组,在重复同样的操作,下面是我写的一段java代码
package org.lxh; public class InsertSort { /** *插入排序 */ public static void main(String[] args) { int arr[]={23,6,45,8,7,24,-2}; for(int i=1;i<arr.length;i++){ //insertVal是准备插入的数 int insertVal=arr[i]; int insertIndex=i-1; //如果待插入的数小于前一个数,则把较大的数移动到后面 while(insertIndex>=0&&insertVal<arr[insertIndex]){ arr[insertIndex+1]=arr[insertIndex]; //考虑到类似-2这样的情况,还必须往前面找合适位置 insertIndex--; } //到这里为止我们就为要插入的数据找到了位置 arr[insertIndex+1]=insertVal; } for(int k=0;k<arr.length;k++){ System.out.println(arr[k]); } } }
对于这段代码可能在 insertIndex-- 这个地方理解起来很困难,这里这样写是为了考虑类似-2的这种情况,不是交换一次就可以。
2.选择排序,这种排序方式有稍微简单些,一般就是先找一个最小的数,可以假设是任意一个,再和后面的比较如果后面的小于前面的说明假设不成立,则修改假设的值,之后交换。
下面是一点资料
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对n个元素的表进行排序总共进行至多n-1次交换。在所有的完全依靠交换去移动元素的排序方法中,选择排序属于非常好的一种。
下面是java的代码实现:
package org.lxh; public class SelectSort { /** * 选择排序 */ public static void main(String[] args) { int arr[]={90,23,45,8,7,24}; int temp=0; for(int i=0;i<arr.length-1;i++){ //假设arr[i]是最小的数 int minVal=arr[i]; //最小的数对应的下标 int minIndex=i; //从后一个数知道数组末尾验证我们前面的假设是否正确 for(int j=i+1;j<arr.length;j++){ //假设不成立,修改minVal和minIndex if(minVal>arr[j]){ minVal=arr[j]; minIndex=j; } } //交换 temp=arr[i]; arr[i]=arr[minIndex]; arr[minIndex]=temp; } for(int k=0;k<arr.length;k++){ System.out.println(arr[k]); } } }
本文出自 “快乐编程” 博客,谢绝转载!