資料結構 排序

2021-10-03 10:45:09 字數 1613 閱讀 8847

本篇簡單梳理了下常見的七種排序演算法:氣泡排序、簡單選擇排序、直接插入排序、希爾排序、堆排序、歸併排序、快速排序,以圖例形式,解釋如何進行排序。

該圖為幾種排序演算法的複雜度、穩定性等。

1. 氣泡排序

void bubblesort(int* a, int n) //氣泡排序

--end;

}}

2. 簡單選擇排序
void selectsort(int* a, int n) //選擇排序

swap(

&a[i], &a[min_index]

); //&

} --end;

++begin;

}}

3. 直接插入排序
void insertsort(int* a, int n) //直接插入排序

else

} a[end + 1]

= tmp; //前面已排好序,直接插入最後乙個w位置}}

4. 希爾排序
void shellsort(int* a, int n)  //雜湊排序

else

} a[end + gap]

= tmp;}}

}

5. 堆排序
void adujustdown(int* a, int n, int parent) //向下調整

else}}

void heapsort(int* a, int n) //堆排序

int end = n - 1; //堆排序

while

(end > 0)

}

6. 歸併排序
void _mergesort(int* a, int left, int right, int* tmp)

else

}while

(begin1 <= end1)

while

(begin2 <= end2)

//拷回原陣列中,開始將資料均放於臨時陣列中

memcpy(a + left, tmp + left, sizeof(int)*(i - left))

; //原、目標、大小(right-left+1)但針對每個小區間

}void mergesort(int* a, int n) //歸併排序

7. 快速排序
int onesort(int* a, int left, int right)

} swap(

&a[left], &a[key_index]

); //left = right時,選取右key,則a[left] 與 key所指的數值交換

return left;

}void quicksort1(int* a, int left, int right) //快速排序

【yang】

資料結構 排序

小小總結了下 希望別不記得 排序型別 排序方法 平均時間 最壞時間 最好時間 穩定空間 插入直接插入 o n2 o n2 o n 穩定o 1 希爾排序 o n3 2 增量序列最後為1,只有公因子1 不穩o 1 選擇簡單選擇 o n2 o n2 o n 穩定o 1 堆排序o n lb n o n lb...

資料結構 排序

郝斌版 資料結構 學習筆記 冒泡 公升序,12比,大放後面,再23比,直至最大的在最後面 插入 2,3,4,依次插入值,保證插入值後的序列為有序的 選擇 後面所有的最小值依次排到最前 快速排序 歸併排序 22排,44排,88排.排序演算法標準 時間,空間,穩定性 排序和查詢的關係 排序是查詢的前提,...

資料結構 排序

1.希爾排序 shellsort 增量序列d n為要排序數的個數 void shellinsertsort int a,int n,int dk n個要排序的數,dk是增量 2 堆排序 已知h s m 除了h s 外均滿足堆的定義 調整h s 使其成為大頂堆.即將對第s個結點為根的子樹篩選,para...