算法设计与分析
算法设计与分析
dos diosas
这个作者很懒,什么都没留下…
展开
-
011.堆排序
#include <iostream> #include <algorithm> using namespace std; void max_heapify(int arr[], int start, int end) { // 建立父節點指標和子節點指標 int dad = start; int son = dad * 2 + 1; while (son <= end) { // 若子節點指標在範圍內才做比較 if (son原创 2020-05-12 16:05:29 · 116 阅读 · 0 评论 -
010.鸡尾酒排序
#include<iostream> #include<algorithm> #include<cstdlib> using namespace std; template<typename T> void cocktailSort(T arr,int len) { int j, left = 0, right = len - 1; while (left < right) { for (j = left; j < right; j+原创 2020-05-12 14:12:28 · 92 阅读 · 0 评论 -
009.希尔排序(实现方式参考自中文维基百科)
#include<stdio.h> #include<stdbool.h> void shellSort(int arr[],int length) { int gap, i, j; int temp; for (gap = length >> 1; gap > 0; gap >>= 1) { for (i = gap; i < length; i++) { temp = arr[i]; for (j = i - ga原创 2020-05-12 14:02:14 · 174 阅读 · 0 评论 -
008.Stooge排序
#include<stdio.h> #include<stdbool.h> void swap(int* a, int* b) { int t = *a; *a = *b; *b = t; } void stoogeSort(int a[], int left, int right) { int temp; if (a[left] > a[right]) { swap(&a[left],&a[right]); } if (right -原创 2020-05-12 13:39:59 · 128 阅读 · 0 评论 -
007.快速排序
#include<stdio.h> void swap(int arr[], int index_i, int index_j) { //將數組相應位置的兩個數相交換 int k = arr[index_i]; arr[index_i] = arr[index_j]; arr[index_j] = k; } //采用Glenn W. Rowe划分算法 int partition_Rowe(int arr[], int low, int high) { //根據一個基准數,將數組分為原创 2020-05-10 22:02:28 · 93 阅读 · 0 评论 -
006.归并排序
以下内容参考自Wikipedia #include<iostream> using namespace std; void merge_sort_recursive(int arr[], int reg[], int start, int end) { if (start >= end) return; int len = end - start, mid = (len原创 2020-05-09 17:10:29 · 166 阅读 · 0 评论 -
005.冒泡排序
#include<iostream> using namespace std; void bubbleSort(int* A, int n) { for (int i = 0; i < n; i++) { for (int j = 1; j < n-i; j++) { if (A[j] < A[j - 1]) { swap(A[j], A[j - 1]); } } } } int main() { int a[] = { 1原创 2020-05-09 15:36:14 · 131 阅读 · 0 评论 -
004.选择排序
#include<iostream> using namespace std; template<typename T> void exchange(T& a, T& b) { int temp; temp = a; a = b; b = temp; } template<typename T> int findMaxIndex(T* a, int begin, int end) { int maxIndex; int n = sizeo原创 2020-05-09 15:31:19 · 95 阅读 · 0 评论 -
003.插入排序
#include<iostream> using namespace std; void InsertSort(int* A, int n) { for (int i = 1; i < n; i++) { int key = A[i]; int j = i - 1; while (j > 0 && A[j] > key) { A[j + 1] = A[j]; j--; } A[j + 1] = key; } }原创 2020-05-09 15:18:57 · 75 阅读 · 0 评论 -
002.Gnome 排序
下面介绍一下 所谓的侏儒排序,其介绍援引自维基百科: 侏儒排序(英语:Gnome Sort)或愚人排序(英语:Stupid Sort)是一种排序算法,最初在2000年由伊朗计算机工程师Hamid Sarbazi-Azad(谢里夫理工大学计算机工程教授)提出,他称之为“愚人排序”。此后Dick Grune也描述了这一算法,称其为“侏儒排序”。此算法类似于插入排序,但是移动元素到它该去的位置是通过一...原创 2020-04-17 15:45:53 · 186 阅读 · 0 评论 -
001.利用栈进行排序
从未想过巧妙地利用栈可以完成一个插入排序的工作,虽然时间复杂度并不能令人满意,但这人可以作为一个扩展思路的"算法". #include<iostream> #include<stack> using namespace std; //利用两个Stack进行排序 这个算法的构思的却巧妙,但是他的时间复杂度可能使我们难以接受的 //在渐进的意义上,其时间复杂度是 O(n²...原创 2020-04-16 17:54:29 · 580 阅读 · 0 评论