之前熟悉C的时候写着玩的,就当做笔记用吧:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#define MAX 8 void print_r(int *arr,int len); static void usage(void)
{
printf("-s selection sort\n"
"-b show unsorted status\n"
"-m merge sort\n"
"-i insertion sort\n"
"-I Information\n"
"-h help and exit\n");
return;
} static void usage_info(void)
{
printf("这是一个排序算法的测试程序\n"
"目前包括选择排序,插入排序和合并排序\n");
return;
} int* create_arr(int *arr)
{
srand(time(NULL));
int i;
for(i=;i<MAX;i++)
{
arr[i]=rand()%;
}
return arr;
} void insertion_sort(int arr[])
{ int temp = ,j = ,i = ; for(j = ;j<MAX;j++)
{
i = j-;
temp = arr[j]; while(i >= && arr[i] < temp)
{
arr[i+] = arr[i];
i--;
}
arr[i+] = temp;
}
} void selection_sort(int arr[],int len)
{
int i,j=,index,key; for(i=;i < len;i++)
{
key = arr[i];
index = i;
j = i+; while(j < len)
{
if(arr[j] < key)
{
key = arr[j];
index = j;
}
j++;
} arr[index] = arr[i];
arr[i] = key;
} }
/**
* start 数组开始下标
* mid 数组分割下标
* end 数组结束下标
*/
void merge(int arr[],int start,int mid,int end)
{
int szie_L,szie_R,i,j,k;
szie_L = mid+-start; //左数组大小
szie_R = end-mid; //右数组大小
int arr_L[szie_L],arr_R[szie_R];
for(i = ;i < szie_L;i++)
{
arr_L[i] = arr[start+i];
}
for(j = ;j < szie_R;j++)
{
arr_R[j] = arr[mid+j+];
} i = ;
j = ; for(k = start;k <= end;k++)
{
if((i < szie_L) && (j < szie_R))
{
if(arr_L[i] <= arr_R[j])
{
arr[k] = arr_L[i];
i++;
}
else if(arr_L[i] > arr_R[j])
{
arr[k] = arr_R[j];
j++;
}
}
else if(j >= szie_R)
{
arr[k] = arr_L[i];
i++;
}
else
{
arr[k] = arr_R[j];
j++;
}
}
}
/**
* start 数组开始下标
* end 数组结束下标
*/
void merge_sort(int arr[],int start,int end)
{
int mid; //用来分割数组的下标
if(start < end)
{
mid = (int)((start+end)/);
merge_sort(arr,start,mid);
merge_sort(arr,mid+,end);
merge(arr,start,mid,end);
}
} void print_r(int *arr,int len)
{
int i;
for(i=;i<len;i++)
{
printf("[%d]=>%d\n",i,arr[i]);
}
}
void main(int argc ,char **argv)
{
int i,c,sorted=;
int arr[MAX];
create_arr(arr);
if(argc>)
{
while(- != (c = getopt(argc,argv,"hsimIb")))
{
switch(c)
{
case 'b':
printf("before sorting : \n");
print_r(arr,MAX);
printf("=========================================\n");
break;
case 'h':
usage();
break;
case 's':
selection_sort(arr,MAX);
printf("selection sorting : \n");
sorted = ;
break;
case 'i':
insertion_sort(arr);
printf("insertion sorting : \n");
sorted = ;
break;
case 'm':
merge_sort(arr,,MAX-);
printf("merge sorting : \n");
sorted = ;
break;
case 'I':
usage_info();
break;
default : usage();
break;
}
} if(sorted)
{
print_r(arr,MAX);
}
}
else
{
usage();
exit();
}
}

常用排序算法集合-C实现的更多相关文章

  1. Java常用排序算法及性能测试集合

    测试报告: Array length: 20000 bubbleSort : 573 ms bubbleSortAdvanced : 596 ms bubbleSortAdvanced2 : 583 ...

  2. C++进阶 STL(3) 第三天 函数对象适配器、常用遍历算法、常用排序算法、常用算数生成算法、常用集合算法、 distance_逆序遍历_修改容器元素

    01昨天课程回顾 02函数对象适配器 函数适配器是用来让一个函数对象表现出另外一种类型的函数对象的特征.因为,许多情况下,我们所持有的函数对象或普通函数的参数个数或是返回值类型并不是我们想要的,这时候 ...

  3. 常用排序算法的python实现和性能分析

    常用排序算法的python实现和性能分析 一年一度的换工作高峰又到了,HR大概每天都塞几份简历过来,基本上一天安排两个面试的话,当天就只能加班干活了.趁着面试别人的机会,自己也把一些基础算法和一些面试 ...

  4. 面试中常用排序算法实现(Java)

    当我们进行数据处理的时候,往往需要对数据进行查找操作,一个有序的数据集往往能够在高效的查找算法下快速得到结果.所以排序的效率就会显的十分重要,本篇我们将着重的介绍几个常见的排序算法,涉及如下内容: 排 ...

  5. 第四百一十五节,python常用排序算法学习

    第四百一十五节,python常用排序算法学习 常用排序 名称 复杂度 说明 备注 冒泡排序Bubble Sort O(N*N) 将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮 ...

  6. Java常用排序算法+程序员必须掌握的8大排序算法+二分法查找法

    Java 常用排序算法/程序员必须掌握的 8大排序算法 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排 ...

  7. 转载部长一篇大作:常用排序算法之JavaScript实现

    转载部长一篇大作:常用排序算法之JavaScript实现 注:本文是转载实验室同门王部长的大作,找实习找工作在即,本文颇有用处!原文出处:http://www.cnblogs.com/ywang172 ...

  8. Java 常用排序算法/程序员必须掌握的 8大排序算法

    Java 常用排序算法/程序员必须掌握的 8大排序算法 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配 ...

  9. 常用排序算法java实现

    写在前面:纸上得来终觉浅.基本排序算法的思想,可能很多人都说的头头是到,但能说和能写出来,真的还是有很大区别的. 今天整理了一下各种常用排序算法,当然还不全,后面会继续补充.代码中可能有累赘或错误的地 ...

随机推荐

  1. N2N 对等VPN网络

    n2n是一个二层的虚拟专网,允许用户开发网络中典型的P2P应用而不是在应用层开发.这就意味着用户可以透明的得到本地地址,只要新的IP地址在一个子网内,无论两台机器处于什么位置都能够ping通对方. N ...

  2. sql Server 发送邮件 错误类型及原因

    设置警报         在[常规项]中做以下设置 新建警报 设置警报名称 选择数据库 选择严重性     在[响应项]中可以做以下设置 选择要邮件通知的操作员 可以设置执行一个警报作业    在选项 ...

  3. javascript从入门到精通(二)

    第二章.数据结构 JavaScript脚本语言的数据结构包括:标识符.关键字.常量.变量等. 标识符:就是一个名称.在JavaScript用来命名变量和函数或者用作JavaScript代码中某些循环的 ...

  4. MySQL字符串函数

    字符串大写和小写转换 MySQL 字符串大写和小写转化函数有两对: lower(), uppper() 和 lcase(), ucase() mysql> select lower('DDD') ...

  5. 基于HTML5的SLG游戏开发( 二):创建HTML5页面

    HTML5游戏的开发过程中是在浏览器上进行运行调试的,所以首先我们需要建立一个html页面. 其中,我们把所有的canvas都放到一个viewporter(视图)里面,因此,在body中放置了一个id ...

  6. shell入门之变量测试 分类: 学习笔记 linux ubuntu 2015-07-10 15:49 31人阅读 评论(0) 收藏

    格式:test 测试条件 字符串测试: 注意空格: test str1 == str2 测试字符串是否相等 test str1 != str2 测试字符串是否不相等 test str1 测试字符串是否 ...

  7. iOS UIKit:view

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css); @import url(/ ...

  8. C#语法糖之开篇

    本人虽然大学不是学的计算机但是对于IT行业的热爱,依然决然进军IT行业了,自从踏进这个行业到现在也已经3年多了,从去年开发通过网上 了解博客园后深深的爱上这儿了,这里有很多牛人,通过拜读他们的代码,让 ...

  9. HTML5+移动APP(2)

    原理: html 页面负责内容: ui 负责页面样式: js 负责调用原生app方法. html5: html5这部分负责页面,也就是app中你看到的东西,大概的架构和内容 ui: mui 介绍:和H ...

  10. 安装Visual Studio 2010时提示"The location specified for the help content store is invalid or you do not have access to it".

    运行注册表: (运行->输入"regedit").在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Help\v1.0中,删除"Loc ...