博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构--各种排序的实现(排序小结 希尔排序 快排 堆排序 归并排序)
阅读量:5057 次
发布时间:2019-06-12

本文共 4214 字,大约阅读时间需要 14 分钟。

 

对各种排序算法的实现

1.冒泡排序:

1 #include "stdio.h" 2 #define N 100005 3  4 void Swap(int *x,int *y){ int k=*x; *x=*y; *y=k; } 5  6 void Bubble_sort(int st,int en,int *a)  //冒泡排序 7 { 8     int i,j; 9     for(i=en; i>st; i--)10     {11         for(j=st; j
a[j+1]) Swap(&a[j],&a[j+1]);13 }14 }15 16 int main()17 {18 int n;19 int a[N];20 scanf("%d",&n);21 for(int i=0; i
Bubble_sort

2.快速排序:

1 #include "stdio.h" 2 #define N 100005 3  4 void T_sort(int st,int en,int *a)  //快速排序 5 { 6     if(st>=en) return ; 7     int l=st,r=en; 8     int temp = a[st];  //以子表的首记录作为支点记录,放入temp变量 9     while(l
=temp)12 --r;13 if(l
T_sort

3.希尔排序:

1 #include "stdio.h" 2 #define N 100005 3  4 void Shell_sort_in_k(int *a,int n,int dk) 5 { 6     int i,j,k; 7     for(i=1; i<=dk; ++i) 8     { 9         for(j=i+dk; j<=n; j+=dk)10         {11             a[0] = a[j];12             for(k=j-dk; k>0&&a[0]
Shell_sort

4.堆排序:

1 #include "stdio.h" 2 #define N 100005 3  4 void Swap(int *x,int *y) { int k=*x; *x=*y; *y=k; } 5  6 void Heap_sort_k(int *a,int st,int en)  //将a[st]~a[en]建成大根堆 7 { 8     int j; 9     int temp = a[st];10     for(j=2*st; j<=en; j*=2)11     {12         if(j
= a[j]) break;14 a[st] = a[j];15 st = j;16 }17 a[st] = temp; //将temp插入到s位置上18 }19 20 void Heap_sort(int *a,int n)21 {22 for(int i=n/2; i>0; i--)23 Heap_sort_k(a,i,n); //将a[1]~a[n]建成大根堆24 for(int i=n; i>1; i--)25 {26 Swap(&a[1],&a[i]); //将堆顶记录与当前未排序的子序列a[]中最后一个记录相互交换27 Heap_sort_k(a,1,i-1); //将a[1..i-1]重新调整为大根堆28 }29 }30 31 int main()32 {33 int n;34 int a[N];35 scanf("%d",&n);36 for(int i=1; i<=n; i++) scanf("%d",&a[i]); //堆排序要从下标1开始存起37 Heap_sort(a,n);38 for(int i=1; i<=n; i++) printf("%d ",a[i]);39 printf("\n");40 }
Heap_sort

5.归并排序:

1 #include "stdio.h" 2 #define N 100005 3 int c[N]; //辅助空间 4  5 void Merge(int *a,int st,int mid,int en) 6 { 7     int i=st,j=mid+1,k=0; 8     while(i<=mid && j<=en)  //将两段区间由小到大并入c[]; 9     {10         if(a[i]<=a[j])11             c[k++]=a[i++];12         else13             c[k++]=a[j++];14     }15     if(i<=mid)  //将剩余的a[i..mid]复制到c[];16         while(i<=mid) c[k++]=a[i++];17     if(j<=en)  //将剩余的a[j..en]复制到c[];18         while(j<=en)  c[k++]=a[j++];19     for(i=st; i<=en; i++)20         a[i]=c[i-st];21 }22 23 void Merge_sort(int *a,int st,int en)  //归并排序24 {25     if(st==en) return ;26     int mid = (st+en)/2;27     Merge_sort(a,st,mid);    //递归的对a[st~mid]进行归并排序28     Merge_sort(a,mid+1,en);  //递归的对a[mid+1~en]进行归并排序29     Merge(a,st,mid,en); //两子数组归并为有序30 }31 32 int main()33 {34     int n;35     int a[N];36     scanf("%d",&n);37     for(int i=0; i
Merge_sort

6.基数排序:

排序合集:

1 #include "stdio.h"  2 #include "string.h"  3   4 #define N 10005  5   6 void Swap(int *x,int *y)  //交换  7 {  8     int t;  9     t = *x; 10     *x = *y; 11     *y = t; 12 } 13  14 void Shell_sort_in_k(int *a,int n,int dk) //对顺序表a进行一趟增量为dk的Shell排序,dk为步长因子 15 { 16     int i,j,k; 17     for(i=1; i<=dk; ++i)  //当前有dk个子序列,共插入排序dk次 18     { 19         for(j=i+dk; j<=n; j+=dk)  //对每一个子序列进行插入排序 20         { 21             a[0] = a[j];  //当前要插入的元素为a[j]; 22             for(k=j-dk; k>0&&a[0]
=r) return ; 43 int start = l; 44 int end = r; 45 while(l
=temp) 48 --r; 49 if(l
= a[j]) break; 70 a[start] = a[j]; 71 start = j; 72 } 73 a[start] = temp; //将temp插入到s位置上 74 } 75 76 void Heap_sort(int *a,int n) //堆排序 77 { 78 int i; 79 for(i=n/2; i>0; i--) 80 Heap_sort_k(a,i,n); //将a[1]~a[n]建成大根堆 81 for(i=n; i>1; i--) 82 { 83 Swap(&a[1],&a[i]); //将堆顶记录与当前未排序的子序列a[]中最后一个记录相互交换 84 Heap_sort_k(a,1,i-1); //将a[1..i-1]重新调整为大根堆 85 } 86 } 87 88 int c[N]; // 辅助空间 89 90 void Merge(int *a,int start,int mid,int end) //将a[start~mid]与a[mid+1~end]合并; 91 { 92 int m,n; 93 int i,j,k; 94 i = start; m = mid; 95 j = mid+1; n = end; 96 k = 0; 97 for( ; i<=m && j<=n; ++k) //将两段区间由小到大并入c[]; 98 { 99 if(a[i]
View Code

转载于:https://www.cnblogs.com/ruo-yu/p/4411943.html

你可能感兴趣的文章
8 -- 深入使用Spring -- 3...1 Resource实现类InputStreamResource、ByteArrayResource
查看>>
硬件笔记之Thinkpad T470P更换2K屏幕
查看>>
一个关于vue+mysql+express的全栈项目(六)------ 聊天模型的设计
查看>>
【知识库】-数据库_MySQL 的七种 join
查看>>
.net 写文件上传下载webservice
查看>>
noSQL数据库相关软件介绍(大数据存储时候,必须使用)
查看>>
iOS开发——缩放图片
查看>>
HTTP之URL的快捷方式
查看>>
满世界都是图论
查看>>
配置链路聚合中极小错误——失之毫厘谬以千里
查看>>
代码整洁
查看>>
蓝桥杯-分小组-java
查看>>
Java基础--面向对象编程1(类与对象)
查看>>
Android Toast
查看>>
iOS开发UI篇—Quartz2D使用(绘制基本图形)
查看>>
docker固定IP地址重启不变
查看>>
桌面图标修复||桌面图标不正常
查看>>
JavaScript基础(四)关于对象及JSON
查看>>
关于js sort排序方法
查看>>
JAVA面试常见问题之Redis篇
查看>>