1. 程式人生 > >直接插入排序、快排 AND歸併排序(圖)

直接插入排序、快排 AND歸併排序(圖)

插入排序的思想

n個待排序的元素有一個有序表和一個無序表組成,開始時,有序表中僅包含“一個元素”。排序工程中將“無序表中”取出一個元素,然後插入有序表中。


For(int i=1;i<a.length,i++)  {

If(a[i]<a[i-1])

{A[0] = a[i];  //a[0]為監視哨 

A[i] = a[i-1];  //a[i-1]賦值a[i]

}

For(j=i-2;a[0]<a[j];j--) {  //難點j比i小2個,是因為如果不小2多比較一次a[i]和a[i-1]

A[j+1]  = a[j] ;

}//倒敘比較a[0]和和a[j]的值,不滿足則將a[0]賦值給a[j+1]

A[j+1] =  a[0];

}


快速排序

利用分治法的思想,先分再排。

假定a[i]從陣列第一個元素開始,A[j]從最後一個元素開始。

具體原理如下:隨意選定一個監視哨A[n],給定一個無序陣列A[0..n](下標為K),將其分為兩個A[1..q](下標為i)和A[q+1..n](下標為j),A[i]與監視哨比較,若大於則與A[j]交換,j-1。否則i+1。這邊是一趟排序。  然後利用分治法的思想繼續將兩個陣列進行排序劃分。

歸併排序