今天心血來潮複習了一下基本的排序演算法,實現了一下,就順便發上來咯。。
在**裡做了注釋了-。-
也就不多說了,直接上**吧。。
// order_algorithm.cpp: 定義控制台應用程式的入口點。
//author: netbin
#include "stdafx.h"
#include "iostream"
#include #include #include #include //指定陣列的大小
const int max_size = 50;
using namespace::std;
//插入排序
//時間複雜度o(n^2),空間複雜度o(n),是乙個穩定演算法;
//假定該陣列有有序區和無序區:則不斷地將無序區的第乙個元素取出放置於有序區的正確位置;
//從i的位置開始,從後往前依次比較,如果nums[j]小於nums[i],則交換二者的位置;
//優化:我們可以知道插入排序的前部是有序的,則如果nums[j]>=nums[i],則表明,i之前的所有元素
//都符合這個特性,那麼也就不需要再繼續比較了;
void insert_sort(vector&nums)
else
break;
} }}//希爾排序
//時間複雜度 o(n^1.3),準確地說希爾排序的時間複雜度與增量序列有關
//它是乙個不穩定的演算法:因為可能數處於不同的組別內
//希爾排序是對插入排序的優化
void shell_sort(vector&nums)
//這裡需要注意的是在上面的for迴圈中,最後還會執行一次j-=gap;
//所以這裡的j+gap會等於上面結束時j的值
nums[j + gap] = temp;
} }}//氣泡排序
//時間複雜度: o(n^2),空間複雜度:o(n)
//穩定性:是乙個穩定演算法
void bubble_sort(vector&nums)
} }}//選擇排序:從無序陣列中選出最小(最大)的數,放到亂序陣列的頭部
//優化:同時選出最大和最小
void select_sort(vector&nums)
} int temp = nums[i];
nums[i] = nums[min];
nums[min] = temp; }}
//快速排序
void quick_sort(vector&nums, int b, int e, vector&temp)
//如果當前位置元素的值小於選中的元素,則新增到臨時陣列的左邊
if (nums[i] < nums[m]) else
} //迴圈結束時,temp陣列中lb指向的位置就是在nums陣列中選中元素所在的位置
temp[lb] = nums[m];
//將temp陣列複製到nums陣列中
for (int i = b; i < e; i++)
//遞迴呼叫
quick_sort(nums,b,lb,temp);
quick_sort(nums, lb + 1, e, temp); }}
//歸併排序
//時間複雜度:o(nlogn)
//歸併排序是將元素分割為乙個乙個的小組,然後對每個小組再進行排序,然後再合併陣列,分而治之的思想
//這種排序的方式與希爾排序的基本思想類似
void merge_array(vector&nums, int b, int m, int e, vector&temp)
else
} //如果右邊的已經空了,而左邊沒空,就將左邊陣列的剩餘所有元素全部入陣列
while (lb < m)
temp[tb++] = nums[lb++];
//如果左邊的已經空了,而右邊沒空,就將右邊陣列的剩餘所有元素全部入陣列
while (rb < m)
temp[tb++] = nums[rb++];
//將此次合併存入臨時陣列的元素全部複製到nums陣列中
for (int i = b; i < e; i++)
}void merge_sort(vector&nums, int b, int e, vector&temp)
}//堆排序
//建堆以及調整堆
void max_heapofy(vector&nums, int beg, int end)
else
//如果不需要調整,則結束此次迴圈
break; }}
void heap_sort(vector&nums)
//將堆頂(最大元素)和陣列的最後乙個值交換,然後再調整堆
for (int i = n - 1; i > 0; i--)
}//初始化vector陣列函式
void init_vec(vector&nums)
}//輸出結果,並清空vector
void print_clear(vector&nums)
cout << endl;
nums.clear();
}int main()
常見的7種排序演算法
1 氣泡排序 最簡單的一種排序演算法。先從陣列中找到最大值 或最小值 並放到陣列最左端 或最右端 然後在剩下的數字中找到次大值 或次小值 以此類推,直到陣列有序排列。演算法的時間複雜度為o n 2 氣泡排序 void bubblesort int arr,int length 2 選擇排序 嚴蔚敏版...
php實現7種常見排序
class test public function createdata sectime microtime this gettimelimit firtime,sectime return data 歸併排序開始 public function mergesort data public fun...
七種常見的排序演算法的C 實現
因為幾個演算法使用了遞迴,這裡測試用的陣列大小又比較大,如果使用vs編譯的話,需要調整一下堆疊的大小,否則容易發生stackoverflow的錯誤。如下 include stdafx.h include include include using namespace std define num 5...