1.選擇排序法
void
sort
(int
*nums,
int numssize)
} nums[min_index]
=nums[i]
; nums[i]
=min;
}}
2.氣泡排序法
void
sort
(int
*nums,
int numssize)}}
}
3.插入排序法
void
sort
(int
*nums,
int numssize)
nums[j+1]
=temp;}}
}
插入排序改進方法:
(1)插入的位置採用二分查詢法,查詢速度更快
(2)資料的儲存採用鍊錶的方式,可以有效減少資料的移動插入帶來的時間損失
4.希爾排序法
void
sort
(int
*nums,
int numssize)
nums[j+gab]
=temp;}}
}while
(gab>1)
;}
5.快速排序法
void
quicksort
(int nums,
int l ,
int r)
} temp=nums[r]
; nums[r]
=nums[j]
; nums[j]
=temp;
quicksort
(nums,l,j-1)
;quicksort
(nums,j+
1,r);}
return
;}
快速排序的改進方法:將比較位k設定為nums[l]、nums[(l+r)/2]、nums[r],三者中的居中值,這樣可以從一定程度上減少計算量
6、歸併排序
void
merge
(int
*nums,
int l,
int m,
int r)
else
}while
(iwhile
(j}void
mergesort
(int
*nums,
int l,
int r)
}
歸併排序的改進方法:可以將陣列分成若干個有序的子陣列,分別做歸併排序最後再合併
7.堆排序
堆是乙個完全二叉樹、堆中父節點的值一定大於子節點
void
heapify
(int
*nums,
int numssize,
int i)
}void
build_heap
(int
*nums,
int numssize)
}void
heap_sort
(int
*nums,
int numssize)
}
不同排序時間比較 排序演算法比較總結
每次從頭開始 每次結束可以不到最後,因為上一次已經確定最大值在末尾了 比較相鄰兩個數,每次下沉乙個最大值。123 4567 891011 1213 1415 1617 1819 2021 2223 2425 2627 2829 3031 3233 3435 36 include usingnames...
C語言排序演算法總結
排序演算法一直都是讓我頭疼的演算法。為了全面掌握排序演算法,我就整理了常用的排序演算法。首先我們來了解一些基本概念 1 穩定排序和非穩定排序 簡單地說就是所有相等的數經過某種排序方法後,仍能保持它們在排序之前的相對次序,我們就 說這種排序方法是穩定的。反之,就是非穩定的。比如 一組數排序前是a1,a...
排序演算法總結(C語言)
總結包括 氣泡排序 選擇排序 插入排序 希爾排序 堆排序 歸併排序 快速排序 桶排序 氣泡排序是從後往前 或從前往後 比較相鄰的兩個元素,如果有逆序則交換他們。這樣每趟就將最小 或最大 元素移到待排元素的一端。最多n 1趟,就可以把所有元素排好序。時間複雜度 最好情況 最壞情況 額外空間複雜度 穩定...