排序演算法學習

2021-08-20 04:22:33 字數 2483 閱讀 5290

#include #include #include #include #include #define n 10000500

long long beg;

int cnt,n;

void show_time()

void swap(int *a,int *b)

///稱這兩個函式為比較函式,函式名即相當於指標,將其寫入排序演算法中,實現**復用

char ascending(int a,int b)//沒有bool我也很無奈

/** * @param s:開始指標 e:結束指標

* @param cmp 指向函式的指標

* @note 歸併排序:平均時間複雜度 o(n*ln(n)) 最壞情況(倒序)o(n^2)

*/void quick_sort(int *s,int *e,char (*cmp)(int ,int ))

void stable_sort(int *s,int *e,char (*cmp)(int ,int))

/** * @note 參考了 csdn

* @note 冪增長複雜度 中等資料規模有較好的表現

*/void shell_sort(int *s,int *e,char (*cmp)(int ,int))

*j = tmp;

}dis_seq = (dis_seq-1)/3;

}}void bubble_sort(int *s,int *e, char (*cmp)(int,int))

}j = last;/// second optimize ,we don't need to sort if the past sequence are order.

}while (not_order);

}void selection_sort(int *s,int *e,char (*cmp)(int ,int))

*j = key;

}}///列印資訊

void show(int *a,int *b)

}int num[n];

int ori[n];

void init(int n)

int main()

cnt = 0;

init(n);

quick_sort(num,num+n,ascending);

show_time();

init(n);

stable_sort(num,num+n,ascending);

show_time();

init(n);

shell_sort(num,num+n,ascending);

show_time();

init(n);

insertion_sort(num,num+n,ascending);

show_time();

init(n);

selection_sort(num,num+n,ascending);

show_time();

init(n);

bubble_sort(num,num+n,ascending);

show_time();

}}/**

* n(ln(n))

* 1 快速排序

* 2 歸併排序

* 介於線性和二次方之間

* 3 希爾排序

* 二次方複雜度

* 4 插入排序

* 5 選擇排序

* 6 氣泡排序

*//*****************

test one:

1000000

case #1: 187.0 ms

case #2: 188.0 ms

case #3: 391.0 ms

test two:

10000000

case #1: 4172.0 ms

case #2: 2136.0 ms

case #3: 11986.0 ms

test three:

10000

case #1: 0.0 ms

case #2: 0.0 ms

case #3: 0.0 ms

case #4: 62.0 ms

case #5: 109.0 ms

case #6: 344.0 ms

test four:

100000

case #1: 15.0 ms

case #2: 15.0 ms

case #3: 32.0 ms

case #4: 6938.0 ms

case #5: 10611.0 ms

case #6: 35866.0 ms

*****************/

排序演算法學習

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

排序演算法學習

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...