【申明:本文仅限于自我归纳总结和相互交流,有纰漏还望各位指出。 联系邮箱: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++各种排序算法实现)的更多相关文章

  1. 算法学习导图+经典排序算法PHP实现

    周末抽时间整理下算法,完整导图可点击下面链接获取. 点我看完整算法导图 八种排序算法的php实现 代码如下 拷贝后可直接运行 先上个运行后的图 代码:(有的自己些的 有的根据网友整理) <?ph ...

  2. 数据结构-二叉搜索树和二叉树排序算法(python实现)

    今天我们要介绍的是一种特殊的二叉树--二叉搜索树,同时我们也会讲到一种排序算法--二叉树排序算法.这两者之间有什么联系呢,我们一起来看一下吧. 开始之前呢,我们先来介绍一下如何创建一颗二叉搜索树. 假 ...

  3. js算法初窥01(排序算法01-冒泡、选择、插入)

    排序,我想大家一定经历过或者正在经历着.或许你不懂算法,对排序算法一无所知,但是你一定用过一些第三方库的api来一键排序,那么,在你享受便捷的同时,你是否想过它的底层是如何实现的?这样的算法实现方式是 ...

  4. js算法初窥02(排序算法02-归并、快速以及堆排序)

    上一篇,我们讲述了一些简单的排序算法,其实说到底,在前端的职业生涯中,不涉及node.不涉及后台的情况下,我目前还真的没想到有哪些地方可以用到这些数据结构和算法,但是我在前面的文章也说过了.或许你用不 ...

  5. Python 一网打尽<排序算法>之从希尔排序算法的分治哲学开始

    1. 前言 本文将介绍希尔排序.归并排序.基数排序(桶排序).堆排序. 在所有的排序算法中,冒泡.插入.选择属于相类似的排序算法,这类算法的共同点:通过不停地比较,再使用交换逻辑重新确定数据的位置. ...

  6. python 下的数据结构与算法---6:6大排序算法

    顶先最后推荐:哈哈,意思是放到顶部强调其重要性,但是应该我总结的六种算法看完了后再看的一篇醍醐灌顶的文章 一:冒泡排序(Bubble Sort) 原理:假设有n个数,第一轮时:从第一个元素开始,与相邻 ...

  7. 在Object-C中学习数据结构与算法之排序算法

    笔者在学习数据结构与算法时,尝试着将排序算法以动画的形式呈现出来更加方便理解记忆,本文配合Demo 在Object-C中学习数据结构与算法之排序算法阅读更佳. 目录 选择排序 冒泡排序 插入排序 快速 ...

  8. (2)Java数据结构--二叉树 -和排序算法实现

    === 注释:此人博客对很多个数据结构类都有讲解-并加以实例 Java API —— ArrayList类 & Vector类 & LinkList类Java API —— BigDe ...

  9. javascript数据结构与算法--基本排序算法(冒泡、选择、排序)及效率比较

    javascript数据结构与算法--基本排序算法(冒泡.选择.排序)及效率比较 一.数组测试平台. javascript数据结构与算法--基本排序(封装基本数组的操作),封装常规数组操作的函数,比如 ...

  10. Python全栈开发之5、几种常见的排序算法以及collections模块提供的数据结构

    转载请注明出处http://www.cnblogs.com/Wxtrkbc/p/5492298.html 在面试中,经常会遇到一些考排序算法的题,在这里,我就简单了列举了几种最常见的排序算法供大家学习 ...

随机推荐

  1. Android学习系列(3)--App自动更新之自定义进度视图和内部存储

    友好的视觉感知和稳定的不出错表现,来自于我们追求美感和考虑的全面性,博客园从技术的角度,一直我都很欣赏.这篇文章是android开发人员的必备知识,是我特别为大家整理和总结的,不求完美,但是有用. 这 ...

  2. Linux基础之常用命令篇

    一.命令的基本格式 [root@localhost~] root为用户名 -表示当前所在位置 localhost主机名 ‘#’超级用户 '$" 普通用户 命令的基本格式: 命令 [选项] [ ...

  3. iOS CPU占有率达到了100%甚至更多,然后导致App闪退

    今天在真机调试的过程中,发现了一个严重的问题,发现CPU的使用率竟然达到了100%,以至于会导致运行内存占用过高,被系统的看门狗机制给杀掉. 下面就讲一讲怎么去定位这个问题: 1.打开Xcode,把项 ...

  4. PMP考试终于结束了。。。

    PMP考试昨天终于结束了,可以好好的先休息下了,先不管成绩了,通过这段时间的学习了解,发现PMP在实际工作中的运用 起的作用还很大,看样子以后要学习的东西还多着呢,先休息一周再说...

  5. C#继承IDisposable释放资源

    public class CDisposable : IDisposable { //析构函数,编译后变成 protected void Finalize(),GC会在回收对象前会调用调用该方法 ~C ...

  6. GL_总账会计科目追寻SLA及子模组

    相信做总账的学友们,一般很多时间都会花费在查询日记账的来源,因为R12多了一个SLA模组,又有些增加了追溯日记账的难度,个人整理了一下 11i过账方式: 子模组-> 总账 (Post Journ ...

  7. 三十道linux内核面试题

      1. Linux中主要有哪几种内核锁? Linux的同步机制从2.0到2.6以来不断发展完善.从最初的原子操作,到后来的信号量,从大内核锁到今天的自旋锁.这些同步机制的发展伴随Linux从单处理器 ...

  8. 将mysql非分区表转换为分区表(转)

    查看表的分布状况mysql> select count(*) from  justin;+----------+| count(*) |+----------+|  5845246 |+---- ...

  9. 为 Blade 模板引擎添加新文件扩展名

    因为一些原因,我准备把 Blessing Skin 的框架换成 Laravel 了(之前是自己搭建的一个框架),但是在模板迁移的时候遇到了一点问题. 之前我是使用的 XiaoLer/blade 这个从 ...

  10. 【转】容易被忽略CSS特性

    这里主要是为了留个备份,更好的排版请查看原文: http://www.cnblogs.com/dolphinX/p/3511300.html //以下为全文转载 CSS初学感觉很简单,但随着学习的深入 ...