上面列了幾個排序演算法的**,這些**都是經過debug,程式驗證過的。我順便也把驗證的環境貼出來吧。很多東西,其實是寫給自己看的。
一、隨機數生成程式,生成一定數量的隨機數,用於排序,結果記錄在檔案中。
bool generatenum(const char *sfileout, int icount)ofstream out (sfileout);if (icount <= 0)
return false;
if (!out)
srand( (unsigned)time( null ) );
for (int i=0; iout << rand() << endl;
return true;
讀取檔案到陣列。
bool loadarraytxt (const char* sfilein, int array)return true; }for (int i=0; i<1000; i++)
in >> array[i];
將排好序的數值存放在檔案中。
bool dumparrarytxt (const char* sfileout, int array)for (int i=0; i<1000; i++)ofstream out (sfileout);
if (!out)
cerr << "can not open the file" << endl;
return false;
out << array[i] << endl;return true; }
測試**:
void playnow(void)int array[1000];
generatenum("stuff\\unordernum.txt", 1000);
loadarraytxt("stuff\\unordernum.txt", array);
bubblesort ();
heapsort ();
dumparrarytxt("stuff\\unordernum_sort.txt");
ok,完事。
重新上本科 堆排序 上
堆排序很有意思。作為排序演算法來講,它和快速排序都是o nlogn 的時間複雜度,都是就地排序,都是採用遞迴。兩者差不多,既生瑜,何生亮?不過堆是一種很有用的資料結構,通過堆排序演算法,可以學習堆這種資料結構,以後可能用得上。堆排序演算法思路很簡單 第一步,構建乙個堆 第二步,取出堆頂 第三步,如果...
重新上本科 快速排序 下
在我的印象中,絕大多數的教科書講解快速排序的時候,都用嚴蔚敏書中的方法,採用左右兩個迭代指示器,從兩個方向進行遍歷比較。能不能只從乙個方向進行遍歷,遍歷一遍就能完成交換任務呢?演算法導論 提供了一種方法。演算法導論 是從左到右遍歷,設定兩個指示器 從這個角度來說本質上與嚴蔚敏的方法一致 乙個指示器指...
重新上本科 快速排序 中
直接看一下嚴蔚敏的 資料結構 他是這麼處理的 他利用了錨值位置上的值,參與到交換過程之中。演算法的過程變為 首先,右迭代指示器從右向左遍歷,找到第乙個比錨值小的數值的位置,並將錨值 預設是陣列第乙個元素 與當前位置的數值相交換 此時,右迭代指示器停止,迭代器指向的位置作為臨時變數,存放錨值,該位置向...