資料結構(嚴蔚敏)第十章 內部排序

2021-07-28 11:30:51 字數 1937 閱讀 1785

//直接插入:左邊有序,右邊無序,從右邊取數依次插入有序中

void insertsort(int list,int len)

list[j]=temp;}}

}

//折半插入:插入點採用折半查詢的方式

void insertsort2(int list,int len)

for(int j=i-1;j>=low;--j)

list[low]=temp;}}

}

//希爾排序,定步長距離d,list[i]和list[i+d]進行大小交換

//步長選擇都是從n/2開始,每次再減半,直到最後為1。其實也可以有另外的更高效的步長選擇

void shellsort1(int a, int n)

a[k + gap] = temp;

} }

}void shellsort2(int a, int n)

a[k + gap] = temp;

} }  

//希爾排序**簡潔版

void shellsort3(int list,int len)

//氣泡排序

void bubblesort(int list,int len)

}if(flag==0) break;}}

//快速排序(遞迴):選取第乙個數為軸心點

int partition(int list,int low,int high)

list[low]=pivotkey;

return low;

}//low為0,high為len-1

void quicksort(int list,int low,int high)

}

//簡單選擇排序:在後面陣列中選擇最小的插入前面的交換

void selectsort(int list,int

len)

}

//堆排序:將欲排陣列構建成完全二叉樹,從n/2開始調整堆(邏輯儲存是二叉樹,物理儲存是順序表)

void adjustheap(int list,int i,int

len)

list[i]=temp;

}//一次調整,能得到最大的

void makemaxheap(int list,int

len)

}//建大頂堆的話,每一次建堆,會選出最大的,和最後面的對換,再只要調整頭,則能得到第二大的,再和倒數的對換,能得到乙個遞增的陣列

void heapsort(int list,int

len)

for(int j=len

-1;j>0;j--)

}

//歸併演算法//將有二個有序數列a[first...mid]和a[mid...last]合併。

void mergearray(int a, int first, int mid, int last, int temp)

while (i <= m) temp[k++] = a[i++];

while (j <= n) temp[k++] = a[j++];

for (i = 0; i < k; i++) a[first + i] = temp[i];

} void mergesort(int a, int first, int last, int temp)

} bool mergesort(int a, int n)

資料結構第十章 內部排序

一 內部排序 是乙個逐步擴大記錄有序序列長度的過程 其中,希爾排序不穩定 1.直接插入排序 o n n o 1 基於順序查詢的排序方法 將乙個記錄插入乙個已經排好序的有序表l中,從而得到乙個新的 記錄數增加1的有序表 特點是 從2開始乙個個判斷是否比前乙個元素要大,如果比前面的小的話就要以0單元為哨...

資料結構 第十章 排序作業

1 若表r在排序前已按鍵值遞增順序排列,則 演算法的比較次數最少。a 直接插入排序 b 快速排序 c 歸併排序 d 選擇排序 2 對各種內部排序方法來說,a 快速排序時間效能最佳 b 歸併排序是穩定的排序方法 c 快速排序是一種選擇排序 d 堆排序所用的輔助空間比較大 3.排序演算法的穩定性是指 a...

資料結構 嚴蔚敏

最近一直想找一本純資料結構的書來學習,找來找去都沒有找到一本合適的書籍,相比之下國內的書籍之中,嚴蔚敏和吳偉民的還算是經典版了,很多國內其他資料結構教材都參考這本書的。但缺點是很多都是偽 對程式設計初學者來說有一些難度,甚至有些考研的同學來看這本書有很多還看不懂,並且裡面也有些容易迷惑人的地方。出於...