(1)順序表
#pragma once
#includeconst int maxsize = 20;
typedef int datatype;
typedef struct datalist;
void swap(datalist& l, int a, int b)
void createlist(datalist& l, datatype a, int n)
void printdatalist(datalist& l)
printf("\n");
}
(2)靜態鍊錶
#pragma once
#include#includeusing namespace std;
#define maxsize 100
#define maxvalue int_max
typedef int datatype;
typedef struct slnode;
typedef struct staticlinklist;
void createslist(staticlinklist& sl, datatype a, int n)
sl.elem[0].key = maxvalue;
sl.elem[0].link = 1;
sl.elem[n].link = 0;
sl.n = n;
}void printslist(staticlinklist& sl)
printf("\n");
}
#include "datalist.h"
void insertsort(datalist& l)
l.data[j + 1] = tmp;
} }}
#include "staticlinklist.h"
void slinkinsertsort(staticlinklist& l)
l.elem[pre].link = i;
l.elem[i].link = p;
}}
void binaryinsertsort(datalist& l)
for (int j = i; j > low; j--)
l.data[low] = tmp;
}}
void insertsort_gap(datalist& l, int start, int gap)
do while (j - gap > 0 && l.data[j - gap] > temp);
l.data[j] = temp; }}
void shellsort(datalist& l, int delta, int m)
}
void bubblesort(datalist& l)
} if (!exchange) return;
}}
(1)遞迴演算法
int partition(datalist& l, int low, int high)
} }l.data[i] = pivot;
return i;
}void quicksort(datalist& l, int left, int right)
}
(2)快速-直接插入混合法
void insertsort(datalist& l, int left, int right)
l.data[j + 1] = temp;
} }}void quicksort_insert(datalist& l, int left, int right, int m)
}
(3)在序列中三者取中並交換到左端的演算法
void median3(datalist& l, int left, int right)
else
if (l.data[right] < l.data[k1])
else if(l.data[right] < l.data[k2])
if (k2 != left) swap(l, k2, left);
}
(4)採用三者取中選擇基準記錄的快速排序演算法
void quicksort_mediancy(datalist& l, int left, int right)
}
1.簡單選擇排序
void selectsort(datalist& l)
if (k != i) swap(l, k, i);
}}
2.堆排序
#pragma once
#include#define heapsize 128
typedef int datatype;
typedef struct maxheap;
void siftdown(maxheap& h, int start, int m)
} h.data[i] = temp;
}
#include "maxheap.h"
void createmaxheap(maxheap& h, datatype arr, int n)
void heapsort(maxheap& h)
}
(1)二路歸併的遞迴演算法
void merge(datalist& l, int left, int mid, int right)
while (i <= mid) l2[k++] = l.data[i++];
while (j <= right) l2[k++] = l.data[j++];
for (int i = 0; i < s; i++) l.data[left + i] = l2[i];
free(l2);
}void mergesort_recur(datalist& l, int left, int right)
}
(2)二路歸併的迭代演算法
void merge_2(datalist& l, datalist& l2, int left, int mid, int right)
while (i <= mid) l2.data[k++] = l.data[i++];
while (j <= right) l2.data[k++] = l.data[j++];
}void mergepass(datalist& l, datalist& l2, int len)
if (i + len < l.n) merge_2(l, l2, i, i + len - 1, l.n - 1);
else for (int j = i; j < l.n; j++) l2.data[j] = l.data[j];
}void mergesort_iter(datalist& l)
}
#include#includeusing namespace std;
const int rd = 10, d = 3, maxsize = 20;
int getdigit(int x, int k)
void radixsort(int a, int left, int right, int k)
posit[0] = 0;
for (j = 1; j < rd; j++) posit[j] = count[j - 1] + posit[j - 1];
for (i = left; i <= right; i++)
for (i = left, j = 0; i <= right; i++, j++) a[i] = auxarray[j];
free(auxarray);
p1 = left;
for (j = 0; j < rd; j++)
}
#include "staticlinklist.h"
const int rd = 10;
const int d = 3;
int getdigit(int x, int k)
void slinkradixsort(staticlinklist& sl)
for (j = 0; front[j] == 0; j++);
sl.elem[0].link = front[j];
last = rear[j];
for (t = j + 1; t < rd; t++)
} sl.elem[last].link = 0;
for (t = sl.elem[0].link; t != 0; t = sl.elem[t].link)
printf("\n");
}}
資料結構1 排序
就算複習再緊張,也要動手實踐資料結構中的基本演算法,徹底理解演算法的本質。不要讓任何理由成為不程式設計的藉口。從快速排序開始,將演算法問題一一攻克。複習提綱 基本資料結構 棧和佇列,陣列和鍊錶 樹和二叉樹 二叉查詢樹 平衡二叉樹 雜湊表 排序演算法 選擇排序 氣泡排序和快速排序 堆和堆排序 計數排序...
資料結構 07 排序
簡單的排序方法 氣泡排序 選擇排序 插入排序 希爾排序。先進的排序方法 歸併排序 快速排序 堆排序 基數排序。1.演算法思想 每次在未排序的元素中兩兩比較找最大值,邊找邊從後往前儲存 未排序.第i大 第2大 第1大 一般情況,整個氣泡排序只需進行 k 1 k氣泡排序結束的條件是 在某一趟排序過程中沒...
資料結構7 排序
理解選擇排序的不穩定性 選擇排序 氣泡排序 插入排序 public int charusort int intarr for int i 1 i intarr.length i return intarr 正確性檢測 test public void sorttest system.out.prin...