排序问题一直是程序员工作与面试的重点,今天特意整理研究下与大家共勉!这里列出8种常见的经典排序,基本涵盖了所有的排序算法。
1.直接插入排序我们经常会到这样一类排序问题:把新的数据插入到已经排好的数据列中。将第一个数和第二个数排序,然后构成一个有序序列将第三个数插入进去,构成一个新的有序序列。对第四个数、第五个数……直到最后一个数,重复第二步。如题所示:
直接插入排序(Straight Insertion Sorting)的基本思想:在要排序的一组数中,假设前面(n-1) [n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。
代码实现:
首先设定插入次数,即循环次数,for(int i=1;i<length;i++),1个数的那次不用插入。
设定插入数和得到已经排好序列的最后一个数的位数。insertNum和j=i-1。
从最后一个数开始向前循环,如果插入数小于当前数,就将当前数向后移动一位。
将当前数放置到空着的位置,即j+1。
代码如下:
1 public void insertSort(int [] a){ 2 int len=a.length;//单独把数组长度拿出来,提高效率 3 int insertNum;//要插入的数 4 for(int i=1;i<len;i++){//因为第一次不用,所以从1开始 5 insertNum=a[i]; 6 int j=i-1;//序列元素个数 7 while(j>=0&&a[j]>insertNum){//从后往前循环,将大于insertNum的数向后移动 8 a[j+1]=a[j];//元素向后移动 9 j--; 10 } 11 a[j+1]=insertNum;//找到位置,插入当前元素 12 } 13 }