1.氣泡排序
氣泡排序採用兩兩比較的方式。如果要由小到大排序,並且從前往後遍歷,那麼將大的往後放,第一重迴圈是比較幾輪,也就是陣列個數,第二重迴圈是從 0 到總數減去輪數。
// 氣泡排序
void mybubble(vector&values)}}
}
2.快速排序
快速排序就是選擇乙個基準資料,然後在陣列中 後前 依次判斷,如果是由小到大的,那麼大的應該在基準右側,小的在基準左側,所以找到不滿足的就交換位置。
注意:快速排序在遞迴時,必須判斷左側標誌否小於右側,否則遞迴無法退出
如果基準選擇的是最左側的資料,那麼就應該先從右側判斷,因為左側基準已經記錄的值,所以右側找到需要交換的資料可以賦值,否則會覆蓋掉陣列的值
在比較的時候必須用 <= 和 >= ,否則碰到兩個相同的資料就會陷入死迴圈。
// 快速排序
int partition(vector&values, int low, int high)
values[low] = values[high];
while (low < high && values[low] <= temp)
values[high] = values[low];
}values[low] = temp;
}return low;
}void quicksort(vector&values,int low, int high)
}
3.插入排序
遍歷元素,與前邊的元素比較,從小到大的話,如果需要前置,那麼將上乙個元素後移,直到找到合適位置,第二重迴圈的 j 可以看作指向 坑 在哪,將前邊的元素放進坑中。
// 插入排序
void insertsort(vector&values)
values[j] = temp;
}}
4.希爾排序
與直接插入排序相似,只不過比較不是逐個比較,而是有乙個增量,每次移動乙個增量。
// 希爾排序
void shellsort(vector&values)
values[j] = temp;}}
}}
5.選擇排序(擂台法)
依次遍歷陣列,由小到大是找到最小值並且記錄下標,然後交換數值
// 選擇排序
void selectsort(vector&values)
}values[n] = values[i];
values[i] = min;}}
}
6.堆排序
堆排序首先是建立乙個大頂堆,即所有的父節點都大於子節點的二叉樹,然後取出最大值:與最後乙個交換,將前邊的繼續建立大頂堆,然後繼續取最大的放到最後,直至結束。
建立大頂堆的演算法:因為初始陣列,只有前一部分有子節點,所以,從中間往前來建立,如果當前節點小於兩個子節點中最大的子節點,那麼就交換位置,然後繼續判斷在交換後的位置是否子節點仍然大於父節點,大於的話繼續交換,直至不再大於,就到下乙個父節點,從而建立成功。
// 堆排序
int leftchild(int i)
void swap(vector&values, int i, int j)
void createmaxheap(vector&values, int i, int length)
if (temp < values[child])
else
}values[i] = temp; //
}void heapsort(vector&values)
for (size_t i = values.size() - 1; i > 0 ; i--)
}
7.歸併排序
首先是 歸 即遞迴,遞迴來分治陣列,不斷的劃分陣列。
然後是 並 即合併,合併來排序。
所以可以先設計合併有序陣列的演算法,建立中間陣列來儲存合併後的資料。
然後遞迴呼叫即可。
// 歸併排序
void mergearray(vector&values, int left, int mid, int right, vector& temp_vec)
else
}// 左邊的沒有排完
while(i <= mid)
// 右邊的沒有排完
while (j <= right)
// 賦值
for (size_t m = 0; m < k; m++)
}void mergesort(vector&values, int left, int right)
}
排序演算法C 實現
整理一下排序演算法。首先乙個陣列,a 我們先要從大到小經行排序 1.按照人們最直觀的思想,應該是一次次的遍歷,每次從裡面取最大的乙個,放到另乙個陣列裡面,這就是簡單選擇排序。2.我們從第乙個值開始,跟其後面的值對比,如果後面的大,則與後面的交換。那麼每一次的結果就是最小被放到了最後,接著是第二小的唄...
C 實現排序演算法
資料結構中有六大經典的排序演算法,分別是氣泡排序 選擇排序 插入排序 歸併排序 快速排序和堆排序,以下是用c 實現的六大經典演算法的 1.氣泡排序 include include include using namespace std 一次氣泡排序 void bubble int arr,int s...
排序演算法 分配排序 C 實現
與之前的那些比較排序不同,分配排序在排序過程無須比較關鍵字,而是通過 分配 和 收集 過程來實現排序。它們的時間複雜度可達到線性階 o n 常見的分配排序有計數排序 counting sort 基數排序 radix sort 桶排序 bucket sort 美國旗幟排序 american flag ...