冒泡排序(Bubble Sort):
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
int main() { int array[10] = {2,3,1,4,5,8,6,9,0,7}; for (int i = 0; i <9 ; ++i) { for (int j = 0; j <10-i-1 ; ++j) { if (array[j]>array[j+1]){ array[j] ^=array[j+1]; array[j+1] ^=array[j]; array[j] ^=array[j+1]; } } } for (int k = 0; k <10 ; ++k) { std::cout<<array[k]<<" "; } return 0; }
直接插入排序:
#include <iostream> void swap(int array[],int size){ for (int i = 1; i <size ; ++i) { for (int j = i; j >0 ; --j) { if (array[j]>array[j-1]) { array[j] ^= array[j-1]; array[j-1] ^= array[j]; array[j] ^= array[j-1]; } } } } int main() { int array[5] = {2,3,1,4,5}; swap(array,5); for (int k = 0; k <5 ; ++k) { std::cout<<array[k]<<" "; } return 0; }
堆排序:
/* * 堆排序的时间复杂度最好到最坏都是O(nlogn),较多元素的时候效率比较高 */ void Heapify(int array[],int first,int end){ int father = first; int son = father * 2 + 1; while(son<end){ if(son + 1< end && array[son]<array[son+1]) ++son; //如果父节点大于子节点则表示调整完毕 if (array[father] > array[son])break; else { //不然就交换父节点和字节点的元素 array[father] ^= array[son]; array[son] ^=array[father]; array[father] ^=array[son]; //父和子节点变成下一个要比较的位置 father = son; son = 2 * father+1; } } } void HeapSort(int array[],int len){ int i; //初始化堆,从最后一个父节点开始 for (i = len/2-1; i>=0;--i) { Heapify(array,i,len); } //从堆中取出最大的元素在调整堆 for (i= len-1;i>0;--i) { array[i] ^=array[0]; array[0] ^=array[i]; array[i] ^=array[0]; //调整成堆 Heapify(array,0,i); } } int main() {
int array[10] = {2,3,1,4,5,8,6,9,0,7}; HeapSort(array,10); for (int k = 0; k <10 ; ++k) { std::cout<<array[k]<<" "; } return 0; }