数据结构——算法之(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 在面试中,经常会遇到一些考排序算法的题,在这里,我就简单了列举了几种最常见的排序算法供大家学习 ...
随机推荐
- INFORMATION_SCHEMA数据库介绍
删除mysql数据库某一张主键表的所有外键关系 SELECT CONCAT('alter table ', TABLE_NAME , ' drop foreign key ', constraint_ ...
- javaBean与map类型相互转换
/** * 把Map键值对转化为javaBean对象 * * @param type * @param map * @return * @throws Exception */ private Obj ...
- iOS - CodeReview 代码评审
1.CodeReview Code Review 中文应该译作 "代码审查" 或是 "代码评审",这是一个流程,当开发人员写好代码后,需要让别人来 review ...
- Linux Pin Control 子系统
Pin Control Subsystem是Linux内核抽象出的一套用于控制硬件引脚的一套子系统. 1.源文件列表 源码位于linux/drivers/pinctrl目录下,源文件列表如下: 文件名 ...
- ulbuntu 安装配置 java
一.下载JDK 下载地址: https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151 ...
- SonarQube4.4+Jenkins进行代码检查实例之三-单元測试分析
作者:张克强 作者微博:张克强-敏捷307 在 <SonarQube4.4+Jenkins进行代码检查实例之中的一个> 中介绍了不编译仅仅检查的方式. 在<SonarQube4 ...
- unity 查看prefab层次
点那个箭头,可以展开:
- 一定不要在头文件中using namespace XXX
一定不要在头文件中using namespace XXX,这样会造成名字空间污染,引发ambiguous错误,又难以定位.
- 《Effective Java》读书笔记三(类和接口)
No13 使类和成员的可访问性最小化 要区别设计良好的模块与设计不好的模块,最重要的因素在于,这个模块对于外部的其他模块而言,是否隐藏其内部数据和其他实现细节.模块之间只通过它们的API进行通信,一个 ...
- 解决fonts.googleapis.com不能访问,导致网页打不开
最近,访问linode.com网站,突然发现网速好慢,老是打不开网页.分析一下网页才知道,原来使用了fonts.googleapis.com 打不开的原因就很明显了,咋办呢?百度啊,百度,最后,终于找 ...