重新上本科 排序 除錯環境

2021-09-30 15:11:04 字數 1226 閱讀 1446

上面列了幾個排序演算法的**,這些**都是經過debug,程式驗證過的。我順便也把驗證的環境貼出來吧。很多東西,其實是寫給自己看的。

一、隨機數生成程式,生成一定數量的隨機數,用於排序,結果記錄在檔案中。

bool generatenum(const char *sfileout, int icount)

if (icount <= 0)

return false;

ofstream out (sfileout);

if (!out)

srand( (unsigned)time( null ) );

for (int i=0; iout << rand() << endl;

return true;

讀取檔案到陣列。

bool loadarraytxt (const char* sfilein, int array)

for (int i=0; i<1000; i++)

in >> array[i];

return true; }

將排好序的數值存放在檔案中。

bool dumparrarytxt (const char* sfileout, int array)

ofstream out (sfileout);

if (!out)

cerr << "can not open the file" << endl;

return false;

for (int i=0; i<1000; i++)

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 的時間複雜度,都是就地排序,都是採用遞迴。兩者差不多,既生瑜,何生亮?不過堆是一種很有用的資料結構,通過堆排序演算法,可以學習堆這種資料結構,以後可能用得上。堆排序演算法思路很簡單 第一步,構建乙個堆 第二步,取出堆頂 第三步,如果...

重新上本科 快速排序 下

在我的印象中,絕大多數的教科書講解快速排序的時候,都用嚴蔚敏書中的方法,採用左右兩個迭代指示器,從兩個方向進行遍歷比較。能不能只從乙個方向進行遍歷,遍歷一遍就能完成交換任務呢?演算法導論 提供了一種方法。演算法導論 是從左到右遍歷,設定兩個指示器 從這個角度來說本質上與嚴蔚敏的方法一致 乙個指示器指...

重新上本科 快速排序 中

直接看一下嚴蔚敏的 資料結構 他是這麼處理的 他利用了錨值位置上的值,參與到交換過程之中。演算法的過程變為 首先,右迭代指示器從右向左遍歷,找到第乙個比錨值小的數值的位置,並將錨值 預設是陣列第乙個元素 與當前位置的數值相交換 此時,右迭代指示器停止,迭代器指向的位置作為臨時變數,存放錨值,該位置向...