数据结构——算法之(043)(c++各种排序算法实现)
【申明:本文仅限于自我归纳总结和相互交流,有纰漏还望各位指出。 联系邮箱:Mr_chenping@163.com】
题目:
c++ 各种排序算法实现
题目分析:
详细排序原理參考相关算法书籍
算法实现:
#include <stdio.h> static void swap(int *a, int *b)
{
int tmp;
tmp = *a;
*a = *b;
*b = tmp;
} static void display(int *array, int size)
{
int i=0;
for(; i<size; ++i)
printf(" %02d", array[i]);
printf("\n");
} void bubble_sort(int *array, int size)
{
int i,j;
for(i=0; i<size-1; ++i)
{
for(j=i+1; j<size; ++j)
{
if(array[i] > array[j])
swap(&array[i], &array[j]);
}
}
} void select_sort(int *array, int size)
{
int i, j, min;
for(i=0; i<size-1; ++i)
{
min = i;
for(j=i+1; j<size; ++j)
{
if(array[i] > array[j])
{
min = j;
break;
}
}
if(min != i)
swap(&array[i], &array[j]);
}
} void quick_sort(int *array, int begin, int end)
{
int left = begin;
int right = end; int split = array[begin];
while(left <= right)
{
while(array[left] < split && left < end)
left++;
while(array[right] > split && right > begin)
right--;
if(left <= right)
swap(&array[left++], &array[right--]);
}
if(left < end)
quick_sort(array, left, end);
if(right > begin)
quick_sort(array, begin, right);
} void insert_sort(int *array, int size)
{
int i, j, tmp;
const int width = 1;
for(i=width; i<size; ++i)
{
tmp = array[i]; j = i-width;
while(j >= 0 && tmp < array[j])
{
array[j+width] = array[j];
j -= width;
}
array[j+width] = tmp;
}
} void shell_sort(int *array, int size)
{
int i, j, tmp; int width = size/2;
while(width >= 1)
{
for(i=width; i<size; ++i)
{
tmp = array[i]; j = i - width;
while(j>=0 && tmp < array[j])
{
array[j+width] = array[j];
j -= width;
}
array[j+width] = tmp;
}
width /= 2;
}
} void heap_update(int *array, int current, int top)
{
int i = current;
int j = 2*i;
int tmp = array[current]; while(j <= top)
{
if(j < top && array[j] < array[j+1])
j++; if(array[j] <= tmp)
break; {
array[i] = array[j];
i = j;
j = 2*i;
}
}
array[i] = tmp;
} void heap_sort(int *array, int size)
{
int i;
for(i=size/2; i>0;--i)
heap_update(array, i, size); for(i=size; i>=2; i--)
{
swap(&array[1], &array[i]);
heap_update(array, 1, i-1);
}
} int main(int argc, char *argv[])
{
int a[] = {5, 12, 67, 9, 20, 13, 16, 21, 90, 54, 32, 61, 90, 101, 3, 2, 7, 8};
int size = sizeof(a)/sizeof(int); printf("%-8s", "before: ");
display(a, size); switch(atoi(argv[1]))
{
case 1:
printf("bubble_sort: ");
bubble_sort(a, size);
display(a, size);
break;
case 2:
printf("select_sort: ");
select_sort(a, size);
display(a, size);
break;
case 3:
printf("quick_sort: ");
quick_sort(a, 0, size-1);
display(a, size);
break;
case 4:
printf("insert_sort: ");
insert_sort(a, size);
display(a, size);
break;
case 5:
printf("shell_sort: ");
shell_sort(a, size);
display(a, size);
break;
case 6:
printf("heap_sort: ");
heap_sort(a, size-1);
display(a, size);
break;
default:
break;
}
return 0;
}
数据结构——算法之(043)(c++各种排序算法实现)的更多相关文章
- 算法学习导图+经典排序算法PHP实现
周末抽时间整理下算法,完整导图可点击下面链接获取. 点我看完整算法导图 八种排序算法的php实现 代码如下 拷贝后可直接运行 先上个运行后的图 代码:(有的自己些的 有的根据网友整理) <?ph ...
- 数据结构-二叉搜索树和二叉树排序算法(python实现)
今天我们要介绍的是一种特殊的二叉树--二叉搜索树,同时我们也会讲到一种排序算法--二叉树排序算法.这两者之间有什么联系呢,我们一起来看一下吧. 开始之前呢,我们先来介绍一下如何创建一颗二叉搜索树. 假 ...
- js算法初窥01(排序算法01-冒泡、选择、插入)
排序,我想大家一定经历过或者正在经历着.或许你不懂算法,对排序算法一无所知,但是你一定用过一些第三方库的api来一键排序,那么,在你享受便捷的同时,你是否想过它的底层是如何实现的?这样的算法实现方式是 ...
- js算法初窥02(排序算法02-归并、快速以及堆排序)
上一篇,我们讲述了一些简单的排序算法,其实说到底,在前端的职业生涯中,不涉及node.不涉及后台的情况下,我目前还真的没想到有哪些地方可以用到这些数据结构和算法,但是我在前面的文章也说过了.或许你用不 ...
- Python 一网打尽<排序算法>之从希尔排序算法的分治哲学开始
1. 前言 本文将介绍希尔排序.归并排序.基数排序(桶排序).堆排序. 在所有的排序算法中,冒泡.插入.选择属于相类似的排序算法,这类算法的共同点:通过不停地比较,再使用交换逻辑重新确定数据的位置. ...
- python 下的数据结构与算法---6:6大排序算法
顶先最后推荐:哈哈,意思是放到顶部强调其重要性,但是应该我总结的六种算法看完了后再看的一篇醍醐灌顶的文章 一:冒泡排序(Bubble Sort) 原理:假设有n个数,第一轮时:从第一个元素开始,与相邻 ...
- 在Object-C中学习数据结构与算法之排序算法
笔者在学习数据结构与算法时,尝试着将排序算法以动画的形式呈现出来更加方便理解记忆,本文配合Demo 在Object-C中学习数据结构与算法之排序算法阅读更佳. 目录 选择排序 冒泡排序 插入排序 快速 ...
- (2)Java数据结构--二叉树 -和排序算法实现
=== 注释:此人博客对很多个数据结构类都有讲解-并加以实例 Java API —— ArrayList类 & Vector类 & LinkList类Java API —— BigDe ...
- javascript数据结构与算法--基本排序算法(冒泡、选择、排序)及效率比较
javascript数据结构与算法--基本排序算法(冒泡.选择.排序)及效率比较 一.数组测试平台. javascript数据结构与算法--基本排序(封装基本数组的操作),封装常规数组操作的函数,比如 ...
- Python全栈开发之5、几种常见的排序算法以及collections模块提供的数据结构
转载请注明出处http://www.cnblogs.com/Wxtrkbc/p/5492298.html 在面试中,经常会遇到一些考排序算法的题,在这里,我就简单了列举了几种最常见的排序算法供大家学习 ...
随机推荐
- BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第13章节--使用业务连接服务创建业务线解决方式 SP Apps中的BCS
BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第13章节--使用业务连接服务创建业务线解决方式 SP Apps中的BCS 之前的联系中,你安装了一个业 ...
- Spring中xml文件配置也可以配置容器list、set、map
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- Java简单验证码的识别
1. 需求 因为项目需要,需要多次登录某网站抓取信息.所以学习了验证码的一些小知识.文章参考http://blog.csdn.net/problc/article/details/5794460的部分 ...
- 同一个界面内取微信的OPENID和调用微信的分享接口
步骤如下,1:判断URL是否有CODE参数传入,没有则拼接那个微信跳转连接,然后redirect2:有CODE传入,调用微信接口,根据code获取openid和access_token,注意这一步取到 ...
- 设置PDF文件默认缩放比例
- WCF transport-and-message-security
Things to Consider When Implementing a Load Balancer with WCF https://msdn.microsoft.com/library/hh2 ...
- <实战> 通过分析Heap Dump 来了解 Memory Leak ,Retained Heap,Shallow Heap
引入: 最近在和别的团队的技术人员聊天,发现很多人对于堆的基本知识都不太熟悉,所以他们不能很好的检测出memory leak问题,这里就用一个专题来讲解如何通过分析heap dump文件来查找memo ...
- ~function(){}() 和(function(){}){}
使用~function(){}()也是声明并调用函数的方法之一: 这是一段使用~function(){}()来声明函数并调用函数的例子: ~function() { alert(typeof next ...
- 08、通过自定义依赖属性,用 StateTrigger 修改全局主题样式
在 Win 10 的 UWP 中,需要在 xaml 中,通过使用 StateTrigger 修改全局的文本大小.Background.画刷等依赖属性等主题样式.下面只针对字体大小进行描述,其它依赖属性 ...
- Activiti进行时——企业工作流生命周期贯通 (zhuan)
http://www.jianshu.com/p/e6971e8a8dad ********************************************** 图1:一个典型的审批工作流程 ...