一、插入排序
思想: 插入排序算法是一个对少量元素进行排序的有效算法。插入排序法的排序思想就是从数组的第二个元素开始,将数组中的每一个元素按照规则插入到已排好序的数组中以达到排序的目的.一般情况下将数组的第一个元素作为启始元素,从第二个元素开始依次插入.由于要插入到的数组是已经排好序的,所以只是要从右向左找到比插入点(下面程序中的insertNote)小(对升序而言)的第一个数组元素就插入到其后面.直到将最后一个数组元素插入到数组中,整个排序过程就算完成.
稳定性:稳定的.
时间复杂度:O(n2)
尽管插入排序的复杂度也是 O(n^2),但一般情况下,插入排序会比冒泡排序快一倍,要比选择排序还要快一点。
JAVA实现该算法如下:
- public void insertSort(int a[]){
- int length=a.length; //数组长度
- int j; //当前值的位置
- int i; //指向j前的位置
- int key; //当前要进行插入排序的值
- //从数组的第二个位置开始遍历值
- for(j=1;j<length;j++){
- key=a[j];
- i=j-1;
- //a[i]比当前值大时,a[i]后移一位,空出i的位置,好让下一次循环的值后移
- while(i>=0 && a[i]>key){
- a[i+1]=a[i]; //将a[i]值后移
- i--; //i前移
- }//跳出循环(找到要插入的中间位置或已遍历到0下标)
- a[i+1]=key; //将当前值插入
- }
- }
事例图如下:
二、冒泡排序
冒泡排序的过程很简单,就是将第一个记录的关键字和第二个记录的关键字进行比较,如果后面的比前面的小则交换,然后比较第二个和第三个,依次类推。比完一趟,最大的那个已经放到了最后的位置,这样就可以对前面N-1个数再循环比较。
- /*
- * 冒泡排序
- */
- public class BubbleSort {
- public void bubble(Integer[] data){
- for(int i=0;i<data.length;i++){
- for(int j=0;j<data.length-1-i;j++){
- if(data[j]>data[j+1]){ //如果后一个数小于前一个数交换
- int tmp=data[j];
- data[j]=data[j+1];
- data[j+1]=tmp;
- }
- }
- }
- }
- }
选择排序和冒泡排序差不多,只是冒泡排序在发现比它小的时候就交换,而选择排序是只有在确定了最小的数据之后,才会发生交换。
选择排序的基本思想:第i趟简单选择排序是指通过n-i次关键字的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录进行交换。先临时记录其位置,只有在一趟
循环完以后确定了最小的数据,才会发生交换。
- protected void do_button_actionPerformed(int[] array)){
- int index;
- for(int i =1;i<array.length;i++)
- {
- index = 0;
- for(int j = 1;j<=array.length-i;j++)
- {
- if(array[j]>array[index]){
- index = j;
- }
- }
- int temp = array[array.length - i];
- array[array.length -i] = array[index];
- array[index] = temp ;
- }
- }