快速排序:選中乙個元素,將比該元素小的元素放在其左側,比該元素大的放在其右側,然後將該元素放在正確的位置。然後對左側和右側的所有元素依次進行以上操作。
以首元素作為比較元素c
初始化i為0,j為len-1
找到右邊第乙個比c小的數字a[j],放在i位置
找到左邊第乙個比c大的數字a[i],放在j位置
重複3、4,直到i,j重合
template void quicksort(t* src, int firstposition, int lastposition)
src[iposition] = compareelement;
quicksort(src, firstposition, iposition - 1);
quicksort(src, iposition + 1, lastposition);
}
歸併排序:假定陣列左右兩側的資料都已經有序,則只要把這兩組資料從頭開始掃瞄排序即可
對左邊部分進行歸併排序
對右邊部分進行歸併排序
合併左右兩部分
template void merge(t* src, int leftstart, int leftend, int rightend)
while (leftposition <= leftend)
cachedvalue[cachedposition++] = src[leftposition++];
while (rightposition <= rightend)
cachedvalue[cachedposition++] = src[rightposition++];
cachedposition = 0;
leftposition = leftstart;
while (leftposition <= rightend)
src[leftposition++] = cachedvalue[cachedposition++];
delete cachedvalue;
}template void mergesort(t*src, int leftstart, int rightend)
堆排序:假定存在乙個最大堆,則每次從堆頂上取出的元素都是堆裡面的最大元素
構造最大堆
取堆頂的元素
重新構造最大堆
template void makeheap(t* src, int rootposition, int lastposition)
else break;
}}template void heapsort(t* src, int start, int end)
}
插入排序:將無序的每乙個元素依次插入到有序的序列中
選擇排序:每次選擇乙個元素並將其放入序列
氣泡排序:每次比較相鄰的兩個元素
shell排序:通過減小間隔依次進行插入排序
so:穩定排序:
插入排序
選擇排序
氣泡排序
歸併排序
不穩定排序:
shell排序:在多次插入排序的過程中可能出現亂序的情況
快速排序:在移動時,如果乙個元素移動,會引起兩個元素都移動,從而亂序
堆排序:在生成堆時,有可能亂序
快速排序 堆排序 歸併排序
快速排序 includeusing namespace std int a 8 int sz sizeof a sizeof int int partition int a,int p,int r int main const int sz sizeof a sizeof int 堆化 保持最大堆的...
快速排序,歸併排序,堆排序
l r 1在奇數長度陣列的中間,偶數長度陣列的左半邊最後乙個,極限情況下陣列只有兩個數,i遇到第乙個數就會停下,此時模擬i,j下標的數有無交換的情況,會發現j在停下來時都位於第乙個數的位置,因此用j,j 1才不會越界 l r 1 1在奇數長度陣列的中間往右第乙個,偶數長度陣列的右半邊第乙個,極限情況...
氣泡排序,快速排序,堆排序,歸併排序
1.氣泡排序 1 基本思想 從無序序列頭部開始,進行兩兩比較,根據大小交換位置,直到最後將最大 最小 的資料元素交換到了無序序列的隊尾,從而成為有序序列的一部分 下一次繼續這個過程,直到所有資料元素都排好序。演算法的核心在於 每次通過兩兩比較交換位置。選出剩餘無序序列裡最大 最小 的資料元素放到隊尾...