数据结构——算法之(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 在面试中,经常会遇到一些考排序算法的题,在这里,我就简单了列举了几种最常见的排序算法供大家学习 ...
随机推荐
- supervisor+gunicorn部署python web项目
有了Nginx,对于Tomcat没有必要详细了解. 有了supervisor,再也没有必要把一个程序设置成服务.驻留进程,supervisor真是一个相见恨晚的好工具. 在Tomcat中,所有的web ...
- Html5 Geolocation获取地理位置信息(转)
Html5中提供了地理位置信息的API,通过浏览器来获取用户当前位置.基于此特性可以开发基于位置的服务应用.在获取地理位置信息前,首先浏览器都会向用户询问是否愿意共享其位置信息,待用户同意后才能使用. ...
- AR_销售订单收款基本操作(流程)
2014-06-04 Created By BaoXinjian
- wait/waitpid函数与僵尸进程、fork 2 times
一.僵尸进程 当子进程退出的时候,内核会向父进程发送SIGCHLD信号,子进程的退出是个异步事件(子进程可以在父进程运行的任何时刻终止) 子进程退出时,内核将子进程置为僵尸状态,这个进程称为僵尸进程, ...
- 基于UDP协议的网络程序
一.下图是典型的UDP客户端/服务器通讯过程 下面依照通信流程,我们来实现一个UDP回射客户/服务器 #include <sys/types.h> #include <sys/so ...
- PowerDesigner列名作为注释
Tools -> Execute Commands -> Edit/Run Script 执行以下脚本: Option Explicit ValidationMode = True Int ...
- spring boot几个初始配置文件
一.gradle // https://mvnrepository.com/artifact/com.squareup.okhttp/okhttp compile group: 'com.square ...
- C#--索引
索引是一组get和set访问器,类似于属性的访问器. 索引和属性在很多方面是相似的. 和属性一样,索引不用分配内存来存储: 索引和属性都主要被用来访问其他数据成员,这些成员和他们关联,他们为这些成员提 ...
- Java并发和多线程那些事儿
我记得我接触电脑的时候是在小学三年级的时候,那是1995年,那年发布了windows95,但是我学习的时候还是只是dos系统,简单对于文件的一些命令操作还有五笔 在过去的那个年代,电脑都是单CPU,也 ...
- Artificial-Intelligence BOOKs与算法
http://mindhacks.cn/2008/09/11/machine-learning-and-ai-resources/ https://www.amazon.com/Information ...