1,选择排序:先找到数列中最小的数,放到数列的最前面;接着在剩下的数里面找最小数,放到刚才那个最小数的后面,依此类推,就能实现排序。
实现过程:5 3  8 7 2 1
第一步:先找到最小的 1   1和5 交换位置                       1 3 8 7 2 5
第二步: 保持1 的位置不变 找第二个最小的数2 与3 交换位置      1 2 8 7 3 5
第三步:保持1和2 的位置不变,找下一个最小的数3与8交换位置      1 2 3 7 8 5
.....
到最后 得到正确的排列顺序:                                   1 2 3 5 7 8     

方法代码:

for(int i =0;i<list.length-1;i++) 

 { 

 select the smallest element in list[i...list.length-1]; 

 swap the smallest with list[i],if necessary; 

 } 

 实现的代码: 

 public class SelectionSort 

 { 

 public static void  selectionSort(double[] list) 

 { 

 for(int i = 0;i<list.length-1;i++)//迭代遍历整个数组 

 { 

 double currentMin = list[i];//找到最小的那个数 

 int currentMinIndex = i;//最小的索引为i 

 for(int j = i+1;j<list.length;j++)//迭代遍历剩下的整个数组 

 { 

 if(currentMin > list[j])//如果找到的最小的那个比以前的那个最小的小,则重新给最小的赋值 

 { 

 currentMin = list[j]; 

 currentMinIndex = j; 

 } 

 } 

 if(currentMinIndex != i) 

 { 

 list[currentMinIndex] = list[i]; 

 list[i] = currentMin; 

 } 

 } 

 } 

 }


2:插入排序:在已经排好的子序列中反复插入一个新的元素进行排序,知道整个数列排好序;
实现的代码:
实现过程:5 3  8 7 2 1
第一步: 先初始状态,确定一个元素5;
第二步: 3与5进行比较 3比5小排在5的前面;
第三步: 3 与5 确定插入8,8比5大,排在5后面;
...
到最后插入1 比任何一个值都小,排在第一个位置,排序完成;

public class  InsertionSort 

 { 

 public static void insertionSort(double [] list) 

 { 

 for(int i = 0;i<list.length;i++)//迭代遍历整个数组 

 { 

 double currentElemnt = list[i];//确定一个元素作为比较的基准 

 int k; 

 for(int k = i - 1;k>=0&&list[k]>currentElemnt;k--)//继续遍历剩下的数组,一个元素一个元素的插入,如果比                                                      以前确定的那个元素大,放在后面,否则放在前面 

 { 

 list[k+1] = list[k]; 


 } 

 list[k+1] = currentElemnt; 

 } 

 } 

 }


3:冒泡法排序:
如果一对元素降序排列,则互换他们的值,否则保持一致;较小的数字想气泡一样逐渐浮到顶部,而较大的沉底;
实现过程: 2 9 5 4 8 1
第一次:2 5 4 8 1 9
第二步:2 5 4 1 8 9
第三步:2 4 1 5 8 9
第四步:2 1 4 5 8 9
第五步:1 2 4 5 8 9     六个数字最后比较五次:如果N个数,最多比较N-1;
代码:

for(int k =1;k<list.length;k++) 

 { 

 for(int i = 0;i<list.length-k;i++) 

 { 

 if(list[i] > list[i+1]) 

 { 

 swap list[i] with list[i+1]; 

 } 

 } 

 }


4.归并排序:
将数组分为两半,对每部分递归的应用归并排序,两部分排好后,对他们进行归并;
实现过程:
实现过程: 2 9 5 4 8 1 7  6
第一次分:(2 9 5 4 )           (8 1 7 6)
第二次分: (2 9)  (5 4)          (8 1)  (7 6)
第三次分:2  9   5   4          8  1   7   6
进行归并:
(2 9 )(4 5 )           (1   8 )(6   7)
归并( 2 4 5 9) (1  6 7 8)
最后一次归并(1  2 4 5  6 7 8 9)
实现代码;

public static void mergeSort(int [] list) 

 { 

 if(list.length>1) 

 { 

 mergeSort(list[0...list.length/2]); 

 merge list[0...list.length/2]with 

 list[list.length/2+1...list.length]; 


 } 

 }


 5:希尔排序:是插入排序的一种变体,再插入排序的过程中,数组元素移动到相邻的位置;
实现过程: 2 9 5 4 8 1 7  6
第一步: 2 9 5 4 8 1 7 6
         2-------8-------
           9-------1------
             5-------7-----
               4--------6------
对一直线上的两个元素排序:
          2--------8-------
            1---------9------
              5----------7-----
                4-----------6--------
排序后的结果:2 1 5 4 8 9 7 6
第二步:      2---5---8---7
                1--4---9----6

对一条直线上的进行排序 2---5--7---8
                        1---4--6---9
 排序后:            2 1  5 4 7 6 8 9
在对这个数组进行简单的插入排序就可以了:
实现代码:

public static void incrementalInsertionSort(T[] a ,int first,int last,int space) 

 { 

 int unsorted,index; 

 for(unsorted = first+space;unsort<=last;unsorted = unsorted+pace) 

 { 

 T firstUnsorted = a[unsorted]; 

 for(index = unsorted-space;(index>=first)&&(firstUnsorted.compareto(a[index])<0);index = index-space) 

 { 

 a[index+space] = a[index]; 

 } 

 a[index+space]= firstUnsorted; 

 } 

 }