排序,就是重新排列表中的元素,使得表中元素滿足按關鍵字有序的過程。
排序有許多種,常用的八大內部排序為氣泡排序、插入排序、選擇排序、希爾排序、快速排序、歸併排序、基數排序、堆排序
這幾種排序沒有絕對的優劣,每種排序都有他們適用範圍
氣泡排序每一趟排序可以確定乙個元素的最終位置,若一次掃瞄並沒有元素進行交換,則說明表已有序。
void bubblesort(elemtype a, int n)
} if(flag == false)
} }
氣泡排序的效能分析:空間效率為o(1),最壞時間複雜度為o(插入排序的基本思想是將乙個未排序的表,按照關鍵字大小插入到前面已經排好序的子串行(表)中,直到表中所有元素插入完成。
void insertsort(elemtype a, int n)}}
效能分析,插入排序的空間複雜度為o(1),時間複雜度為o(希爾排序的基本思想是先將待排序的表分割成若干個特殊子表,每個子表的元素在主表中間隔n個元素,並將間隔量稱為增量,然後對各個子表進行插入排序,當整個表中的元素基本有序,再對全體記錄進行一次插入排序
void shellsort(elemtype a, int n)
a[j+dk] = a[0];
}} }
}
效能分析:空間複雜度為o(1),時間複雜度為o(快速排序的基本思想是分治,在待排序的表中隨機選取乙個元素pivot作為樞紐(基準),經過一次排序後,樞紐左邊的元素均小於樞紐,樞紐右邊的元素均大於樞紐
,即樞紐確定其在有序表的最終位置,這樣的一次過程稱為一趟快排,或叫一次劃分。
int partition(elemtype a, int lo, int hi)
a[lo] = pivot;
return lo;
}void quicksort(elemtype a, int lo, int hi)
}
效能分析:空間效率,快排遞迴需要借助遞迴工作棧來儲存每層遞迴的資訊,其容量和遞迴的最大深度一致。時間效率,最好情況 八大內部排序
先來看看8種排序之間的關係 一 直接插入排序 如下 1 public void inerrtsort int a 10 a j 1 tem 11 12 看起來簡單 實則有太多細節 二 希爾排序 public void shellsort int list list j gap temp 縮小增量 g...
八大內部排序演算法
八大內部排序包括 l插入排序 直接插入排序 希爾排序 又稱增量排序 l選擇排序 簡單選擇排序 堆排序l交換排序 氣泡排序 快速排序 l歸併排序 l基數排序 又稱桶排序 排序演算法解析 1 直接插入排序與希爾排序 直接排序與希爾排序同屬於插入排序,不一樣的是,直接排序每次將tmp元素與前面所有的元素進...
八大內部排序 歸併排序
歸併排序 merge sort 將兩個或兩個以上的有序列表組合成乙個新的有序表,合併的m,n長度的兩個表的複雜度為o m n n個數的序列進行歸併共有ceil logn 次,每一次合併都是n常數級別的,所以總的複雜度為o nlogn 同時歸併排序是一種穩定的排序。如下,採用的是利用遞迴的方式書寫,要...