資料結構(十) 排序

2021-10-05 18:20:44 字數 4601 閱讀 2500

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