排序算法

来源:互联网 发布:电脑cpu降温软件 编辑:程序博客网 时间:2024/06/15 13:51

1. 冒泡:就是一组数中,从头到尾一次前后两个数顺序地比较,一旦发现前数大于后数,立马交换值。代码如下:

package net.dont.sort;/** * 关于冒泡排序  */public class TestBubble {/*** @param args*/    public static void main(String[] args) {        TestBubble tb = new TestBubble();        int[] a = {1,8,5,6,3,7,5,4,8,9,12,2};        tb.bubbleSort(a);        for(int c : a){            System.out.println(c);        }    }    static void bubbleSort(int[] array){        if(array.length == 0)return ;        for(int i=0;i<array.length-1;i++){//i是计数标记            for(int j=0;j<array.length-i-1;j++){//注意终止条件的判断,冒泡的亮点在于从头到尾一对一对比较                if(array[j]>array[j+1]){                    swap(array, j, j+1);                }            }        }    }    static void swap(int[] array,int i,int j){        int temp = array[i];        array[i] = array[j];        array[j] = temp;    }}

2. 选择排序:就是在整一组里先以第一个位置作为起点,让上面的数跟后面的所有数依次进行比较,其中一旦发现有更小的数,就交换;全部比较完之后就已经把最小值放到了第一位了,然后就是从第二位开始,下面不说了,直接看代码:

package net.dont.sort;/*** 选择排序*/public class TestSelectSort {/*** @param args*/public static void main(String[] args) {         TestSelectSort ts = new TestSelectSort();         int[] a = {1,8,5,6,3,7,5,4,8,9,12,2};         ts.selectSort(a);         for(int c : a){             System.out.println(c);         }     }          static void selectSort(int[] array){         if(array.length == 0)return ;         for(int i=0;i<array.length-1;i++){             for(int j=i+1;j<array.length;j++){                 if(array[i]>array[j]){                     swap(array, i, j);                 }            }         }     }          static void swap(int[] array,int i,int j){         int temp = array[i];         array[i] = array[j];         array[j] = temp;      } }

3、插入排序

直接插入排序:基本思想是将待排序的记录按其关键字大小逐个插入到一个已经排好序的有序序列中去,直到所有记录插入完为止。

void zjinsert(redtype r[],int n){  int i,j;  for(i=2;i<n;i++){  r[0]=r[i];  j=i-1;  while(r[0].key<r[j].key){  r[j+1]=r[j];  j--;  }  r[j+1]=r[0];  }}

时间复杂度O(n2),空间复杂度O(1)。

希尔排序,又称缩小增量排序,也是一种插入排序类算法,希尔排序是不稳定的排序方法:思路是,选定第一个增量d1<n,从第一条记录起吧全部记录按此值进行分组,所有相聚d1的记录作为一组。先把各组内进行插入排序,然后缩小间隔,取第二个增量d2<d1,重复上述分组和排序过程,直到di=1。di有多中取法,希尔提出的取法是di=n/2,di+1=di/2,这里采用希尔的取法。