ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:17.26KB ,
资源ID:4096299      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-4096299.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(c++常见排序算法.docx)为本站会员(b****4)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

c++常见排序算法.docx

1、c+常见排序算法/* 气泡排序,快速排序,插入排序,希尔排序,选择排序,堆排序 ,归并排序,基数排序*/#include #include#define Max 100000000using namespace std;templateclass SortRpublic: SortR() arr = new TMax; SortR() deletearr; void InputValue(); void BubbleSort(); /冒泡排序 void QuickSort(); /快速排序 void InsertSort(); /插入排序 void HillSort(); /希尔排序 void

2、 SelectSort(); /选择排序 void HeapSort(); /堆排序 void MergeSort(); /归并排序 void BaseSort(); /基数排序 void Display(T*); /输出排序结果private: void Swap(T*, T*)const; int findPivot(int, int, T*)const; int Partition(int, int, T, T*)const; void QuickSortRev(int, int, T*); /快排递归 void PushDown(int, int,T*)const; /堆排序,整理堆

3、void Merge_array(T*,int,int,int,T*); /合并两个数组 void merge_sort(T*, int, int, T*); /归并排序,递归实现 T GetDigit(T x, int d); void msdradix_sort(T*,int,int,int); T *arr; int n;templatevoid SortR:InputValue() cout n; n = 10000; cout 输入数组元素:; srand(T)time(NULL); for (int i = 0; i arri; arri = rand() %100000;temp

4、latevoid SortR:Swap(T*t1, T*t2)const /交换 T temp; temp = *t1; *t1 = *t2; *t2 = temp;/* -冒泡排序- */templatevoid SortR:BubbleSort() /-时间测试 clock_t start, finish; double totaltime; start = clock();/- T *bubble_arr = new Tn; for (int i = 0; i n; i+) bubble_arri = arri; for (int i = 0; ii; j-) if (bubble_ar

5、rjbubble_arrj - 1) /后面的比前一个小就交换 Swap(&bubble_arrj, &bubble_arrj - 1); finish = clock(); totaltime = (double)(finish - start) / CLOCKS_PER_SEC; cout 运行时间: totaltime 秒 endl; /Display(bubble_arr); /Display(arr);/* -快速排序- */templateint SortR:findPivot(int i, int j, T*quick_arr)const T firstkey; int k; f

6、irstkey = quick_arri; for (k = i + 1; k firstkey) return k; else if (quick_arrkfirstkey) return i; else return -1; /没有不同关键字 return 0;templateint SortR:Partition(int i, int j, T piovt, T *quick_arr)const int l = i, r = j; do Swap(&quick_arrl, &quick_arrr); while (quick_arrl= piovt) r-; while (l = r);

7、 return l;templatevoid SortR:QuickSortRev(int i, int j, T *quick_arr) T piovt; int piovtindex; int k; piovtindex = findPivot(i, j, quick_arr); if (piovtindex = 0) piovt = quick_arrpiovtindex; k = Partition(i, j, piovt, quick_arr); /Display(quick_arr); /输出 return; QuickSortRev(i, k - 1, quick_arr); Q

8、uickSortRev(k, j, quick_arr); templatevoid SortR:QuickSort() /-时间测试 clock_t start, finish; double totaltime; start = clock(); T *quick_arr = new Tn; for (int i = 0; i n; i+) quick_arri = arri; QuickSortRev(0, n - 1, quick_arr); /- finish = clock(); totaltime = (double)(finish - start) / CLOCKS_PER_S

9、EC; cout 运行时间: totaltime 秒 endl; /Display(arr);/*-插入排序-*/templatevoid SortR:InsertSort() /插入排序 /-时间测试 clock_t start, finish; double totaltime; start = clock(); T *insert_arr = new Tn; for (int i = 0; i n; i+) insert_arri+1 = arri; insert_arr0 = -1; for (int i = 1; in; i+) int j = i; while (insert_ar

10、rjinsert_arrj - 1) Swap(&insert_arrj, &insert_arrj - 1); j-; /- finish = clock(); totaltime = (double)(finish - start) / CLOCKS_PER_SEC; cout 运行时间: totaltime 秒 endl; /for (int i = 1; i = 20; i+) / cout insert_arri ; /cout endl; /Display(arr);/*-希尔排序-*/templatevoid SortR:HillSort() /-时间测试 clock_t sta

11、rt, finish; double totaltime; start = clock(); T *hill_arr = new Tn; for (int i = 0; i 0;gap/=2) for (j = gap; j n; j+) if (hill_arrj = 0 & hill_arrktemp) hill_arrk + gap = hill_arrk; k -= gap; hill_arrk + gap = temp; /Display(hill_arr); /- finish = clock(); totaltime = (double)(finish - start) / CL

12、OCKS_PER_SEC; cout 运行时间: totaltime 秒 endl;/*-选择排序-*/templatevoid SortR:SelectSort() /-时间测试 clock_t start, finish; double totaltime; start = clock(); T *select_arr = new Tn; for (int i = 0; i n; i+) select_arri = arri; T minindex; /存储最小的元素 for (int i = 0; in; i+) minindex = select_arri; for (int j =

13、i + 1; jn; j+) if (select_arrjminindex) minindex = select_arrj; Swap(&select_arri, &minindex); /Display(select_arr); /- finish = clock(); totaltime = (double)(finish - start) / CLOCKS_PER_SEC; cout 运行时间: totaltime 秒 endl;/*-堆排序-*/ templatevoid SortR:PushDown(int first, int last,T *heap_arr)const int

14、 r; r = first; while (r heap_arr2 * r) Swap(&heap_arr2*r,&heap_arrr); r = last; else if (heap_arrr heap_arr2 * r) & (heap_arr2*r heap_arr2 * r + 1) & (heap_arr2 * r+1 = heap_arr2*r) /r与右儿子交换 Swap(&heap_arr2*r+1, &heap_arrr); r = r * 2 + 1; else r = last; templatevoid SortR:HeapSort() /-时间测试 clock_t

15、start, finish; double totaltime; start = clock(); T *heap_arr = new Tn; for (int i = 0; i = 1; i-) PushDown(i, n, heap_arr); for (i = n; i1; i-) Swap(&heap_arr1, &heap_arri); PushDown(1,i-1, heap_arr); /- finish = clock(); totaltime = (double)(finish - start) / CLOCKS_PER_SEC; cout 运行时间: totaltime 秒

16、 0; i-) cout heap_arri ; cout endl;*/*-归并排序-*/templatevoid SortR:Merge_array(T*merge_arr, int first, int midle, int last, T*temp) int i = first, j = midle + 1; int m = midle, l = last, k = 0; while (i = m & j = l) if (merge_arri = merge_arrj) tempk+ = merge_arri+; else tempk+ = merge_arrj+; while (i

17、 = m) tempk+ = merge_arri+; while (j = l) tempk+ = merge_arrj+; for (i = 0; i k; i+) merge_arrfirst + i = tempi;templatevoid SortR:merge_sort(T*merge_arr,int first,int last,T*temp) if (first last) int mid = (first + last) / 2; merge_sort(merge_arr, first, mid, temp); merge_sort(merge_arr, mid + 1, l

18、ast, temp); Merge_array(merge_arr, first, mid, last, temp); templatevoid SortR:MergeSort() /-时间测试 clock_t start, finish; double totaltime; start = clock(); T *merge_arr = new Tn; for (int i = 0; i n; i+) merge_arri + 1 = arri; T *p = new Tn; merge_sort(merge_arr, 1, n, p); /- finish = clock(); total

19、time = (double)(finish - start) / CLOCKS_PER_SEC; cout 运行时间: totaltime 秒 endl; /*for (int i = 1; i = n; i+) cout merge_arri ; cout endl;*/*-基数排序-*/templateT SortR:GetDigit(T x, int d) int a = 1, 1, 10;/排的是100以内的 return (x / ad) % 10;templatevoid SortR:msdradix_sort(T *base_arr,int first,int last,int

20、 d) int radix = 10; int count10, i, j; for (i = 0; i radix; i+) counti = 0; T*bucker = new Tn; for (i = first; i = last; i+) countGetDigit(base_arri, d)+; for (i = 1; i = first; -i) j = GetDigit(base_arri, d); buckercountj - 1 = base_arri; -countj; for (i = first,j = 0; i = last; i+,j+) base_arri =

21、buckerj; for (i = 0; i radix; i+) int p1 = first + counti; int p2 = first + counti + 1 - 1; if (p11) msdradix_sort(base_arr, p1, p2, d - 1); templatevoid SortR:BaseSort() /*cout 输入所要排的数(先默认0-99的,n值还是最开始的):endl; T *base_arr = new Tn; for (int i = 0; i base_arri;*/ /-时间测试 clock_t start, finish; double

22、 totaltime; start = clock(); T *base_arr = new Tn; for (int i = 0; i n; i+) base_arri = arri; msdradix_sort(base_arr, 0, n - 1, 2); /- finish = clock(); totaltime = (double)(finish - start) / CLOCKS_PER_SEC; cout 运行时间: totaltime 秒 endl; cout 排序结果: endl; /Display(base_arr);/*-输出函数-*/templatevoid Sort

23、R:Display(T *newarray) for (int i = 0; i20; i+) cout newarrayi ; cout endl;/*-主函数-*/int main() cout 排序方法(从小到大): endl; SortR mysort; mysort.InputValue(); cout 气泡排序: endl; mysort.BubbleSort(); cout 快速排序: endl; mysort.QuickSort(); cout 插入排序: endl; mysort.InsertSort(); cout 希尔排序: endl; mysort.HillSort(); cout 选择排序: endl; mysort.SelectSort(); cout 堆排序: endl; mysort.HeapSort(); cout 归并排序: endl; mysort.MergeSort(); cout 基数排序: endl; mysort.BaseSort(); system(pause); return 0;/*

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2