我们这里说说八大排序就是内部排序。
将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表。即:先将序列的第1个记录看成是一个有序的子序列,然后从第2个记录逐个进行插入,直至整个序列有序为止。
要点:设立哨兵,作为临时存储和判断数组边界之用。
直接插入实现如下:
/* * 1.插入排序 * 思想:每遍历一次,都把数组中下表为当前遍历次数的数字插入到已经排好的顺序当中去 * 插入排序中,总是先寻找插入位置,然后在实行挪动和插入过程;寻找插入位置采用顺序查找的方式(从前向后或者从后向前), * 既然需要插入的数组已经是有序的,那么可以采用二分查找方法来寻找插入位置,提高算法效率,但算法的时间复杂度仍为O(n2)。 */ public void insertSort(Integer []array){ int size=array.length; int temp; System.out.println("插入排序结果:"); for(int i=1;i<size;i++){ if(array[i]<array[i-1]){ for(int j=i;j>0;j--){ if(array[j]<array[j-1]){ temp = array[j-1]; array[j-1] = array[j]; array[j] = temp; } } //=========输出排序详情 System.out.print("第" + (i) +"次:"); for (int j = 0; j < array.length; j++) { System.out.print(array[j] + " "); } System.out.println(); } } }
<span style="white-space:pre"> </span>/* * 2.简单选择排序 * 思想:遍历数组剩余数字,每次选择最小的一个数和当前的遍历次数位置数字替换 */ public void choiceSort(Integer []array){ int size=array.length; System.out.println("\n选择排序:"); for (int i = 0; i < size; i++) { int temp = array[i],min=i; for (int j = size-1; j >=i; j--) { if(array[j] <temp){ temp = array[j]; min=j; } } if(min!=i){ array[min]=array[i]; array[i]=temp; } //=========输出排序详情 System.out.print("第" + (i+1) +"次:"); for (int j = 0; j < array.length; j++) { System.out.print(array[j] + " "); } System.out.println(); } }
//3.冒泡排序 public void Bubble_Sort(Integer []array){ int size = array.length; int tmp; System.out.println("冒泡排序结果:"); for(int i=0;i<size;i++){ for(int j=size-1;j>i;j--){ if(array[j]<array[j-1]){ tmp=array[j-1]; array[j-1]=array[j]; array[j]=tmp; } } //=========输出排序详情 System.out.print("第" + (i+1) +"次:"); for (int j = 0; j < array.length; j++) { System.out.print(array[j] + " "); } System.out.println(); } }
基本思想:
1)选择一个基准元素,通常选择第一个元素或者最后一个元素,
2)通过一趟排序讲待排序的记录分割成独立的两部分,其中一部分记录的元素值均比基准元素值小。另一部分记录的 元素值比基准值大。
3)此时基准元素在其排好序后的正确位置
4)然后分别对这两部分记录用同样的方法继续进行排序,直到整个序列有序。
具体实现如下:/* * 4.快速排序 */ public void QuickSort(Integer []array, int low, int high){ int i=low,j=high; if(i<j){ int po = array[low]; while(i<j){ while(i<j && po<array[j]){ j--; } if(i<j){ int temp = array[i]; array[i] = array[j]; array[j] = temp; i++; } while(i<j && po>array[i]){ i++; } if(i<j){ int temp = array[i]; array[i] = array[j]; array[j] = temp; j--; } } QuickSort(array,low,j-1); QuickSort(array,j+1,high); } }
package com.devin.sequence; /** * * @JavaTest * @author 刘帝伟 * @date 创建时间:2015年4月14日 下午3:19:35 * @version 2015年4月14日 * */ public class Test { public static void main(String[] args) { Integer [] array = {1,33,3,14,5,71,6,88}; Test t = new Test(); //t.Bubble_Sort(array); System.out.println(); // t.insertSort(array); //t.choiceSort(array); //快速排序 t.QuickSort(array, 0, array.length-1); System.out.println(); for (int j2 = 0; j2 < array.length; j2++) { System.err.print (array[j2]+" "); } } }
原文地址:http://blog.csdn.net/dream_angel_z/article/details/45172411