</pre><span style="font-size:18px;">今天花了一些時間重新溫習了一下排序算法總的來說有以下幾種:</span></h3><h3></h3><h3></h3><p><span class="wmd-input-section"><span class="token p"></span><span class="token lf"></span><span class="token p"><span style="font-size:18px;">(1)冒泡排序最簡單粗暴的算法對數組進行從a[0]進行掃描,遇到比當前小的就換位置,掃描一遍後接着掃描第二遍,</span></span></span><span class="token lf"><span style="font-size:18px;">一直到掃描結束代碼如下</span></span></p><span class="token lf"></span><pre class="cpp" name="code"><span style="font-size:14px;"> void bubble_sort(int a[],int n){
bool sorted = false;//整體排序標誌
while(!sorted){
sorted = true;//假定已經排序
for(int i=0;i<n-1;i++){
if(a[i+1]<a[i])
swap(a[i],a[i+1]);
sorted =false;
}
}
//n--;這裏代表最後末尾必然是最大的數因此,可以縮短待排序的長度
}</span>
冒泡排序比較重要的是設置監哨,來監控是否排序完畢。其時間複雜度o(n^2)
(2)選擇排序與冒泡比較相似與冒泡不相同的是選擇排序是在定位後,要找到一系列最小的纔會選擇交換
其時間複雜度與冒泡相同
void select_sort(int a[],int n){
for(i=0;i<n-1;i++){
int k = i;
int key = a[i];
for(int j=i+1;j<len;j++){//雙層循環遍歷每個值找出最小
if(a[j]<key){
k = j;
key = a[j];//最小值位置以及值
}
}
if(k!=i)
swap(a[i],a[k])//若是不爲現在起始最小值那麼交換
}
}
(3)插入(感覺好邪惡)排序法
insert 排序比較簡單,每一個都進行較,掃描一遍就可以搞定直接上代碼
void insert_sort(int a[],int length)
{
for(int j=1;j<length;j++)
{
int key=a[j];//記錄下後面一個值
int i=j-1;
while(i>=0&&a[i]>key)//對前面進行掃描,把要排序的a[j]放置正確位置
{
a[i+1]=a[i];
i--;
}
a[i+1]=key;//對後面這個值賦予新的值
}
}
今天就寫這些明天再更