C 排序演算法學習模板

2021-09-11 00:14:58 字數 1614 閱讀 3347

sorttesthelper.h中給出了生成隨機數組以及測試和計時函式

#pragma once

#include #include #include #include using namespace std;

namespace sorttesthelper

return arr;

} // 生成幾乎有序的陣列(隨機交換幾次)

int *generatenearlyorderedarray(int n, int swaptimes)

srand(time(null));

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

return arr;

} // 列印陣列

templatevoid printarray(t arr, int n)

// 判斷陣列是否已經正確排序

templatebool issorted(t arr, int n)

return true;

} // 計時函式

templatevoid testsort(string sortname, void(*sort)(t, int), t arr, int n)

// 拷貝乙份陣列

int* copyintarray(int a, int n)

}

選擇排序:每次選擇當前子陣列中最小值,放到開頭。

插入排序:來自打牌中理排的方法,從後往前插入。在近乎有序陣列,效率非常高,近似o(n)

歸併排序:每次從中間二分,合併兩個左右兩邊已經排好序的子陣列,合併過程需要借助額外的空間。

快速排序:parition過程中得到乙個標誌位,標誌位左邊的都小於這個數,標誌位右邊的都大於這個數,然後遞迴的呼叫函式。

#include #include #include "sorttesthelper.h"

using namespace std;

templatevoid selectionsort(t arr, int n)

}templatevoid insertionsort(t arr, int n)

}templatevoid __merge(t arr, int l, int mid, int r)

else if (j > r)

else if (aux[i - l] < aux[j - l])

else

} deleteaux;

}// 遞迴使用歸併排序,對arr[l...r]的範圍進行排序

templatevoid __mergesort(t arr, int l, int r)

templatevoid mergesort(t arr, int n)

templateint __partition(t arr, int l, int r)

} swap(arr[l], arr[j]);

return j;

}template void __quicksort(t arr, int l, int r)

templatevoid quicksort(t arr, int n)

int main()

排序演算法學習

一直都想把排序和搜尋類的演算法總結一下,一直拖著沒寫,主要是太懶了,現在決定還是要再好好學習下這些基本的演算法。畢竟基礎真的是很重要。好了現在開始學習第乙個排序演算法 插入排序 我記得插入排序在我們以前的資料結構教程上是第乙個介紹的 插入排序 聽這個排序名字就是將乙個什麼數要插入到某個地方,不錯,他...

排序演算法學習

1.氣泡排序 using system using system.collections.generic using system.linq using system.text using system.threading.tasks namespace 排序演算法練習 從小排序 public ov...

排序演算法學習

快速排序演算法 通過一趟排序將資料分成兩部分 其中一部分的資料要比 另外一部分小或大 利用遞迴進行 直至資料有序 演算法步驟 1.定義兩個指標分別指向低位和高位 2.將陣列第乙個元素作為基數 3.從後往前遍歷 high 直至找到第乙個小於key的值 4.從前往後遍歷 low 直至找到第乙個大於key...