本篇簡單梳理了下常見的七種排序演算法:氣泡排序、簡單選擇排序、直接插入排序、希爾排序、堆排序、歸併排序、快速排序,以圖例形式,解釋如何進行排序。
該圖為幾種排序演算法的複雜度、穩定性等。
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...