之前熟悉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. 每天一道算法_6_I Think I Need a Houseboat

    今天的题目是I Think I Need a Houseboat 如下: Description Fred Mapper is considering purchasing some land in ...

  2. bzoj 2741 分块+可持久化trie

    多个询问l,r,求所有子区间异或和中最大是多少 强制在线 做法: 分块+可持久化trie 1.对于每块的左端点i,预处理出i到任意一个j,()i,j)间所有子区间异或和中最大为多少,复杂度O(\(n\ ...

  3. 用ChooseALicense帮自己选一个开源license,然后用AddALicense给自己的github自动加上license文件

    在我之前的一篇博客里面介绍过tl;drLegal ——开源软件license的搜索引擎,可以很方便的查询各种license,并且给出了很简洁的解释.今天又发现了另外一个帮助你选择你的开源软件licen ...

  4. ng-if与ng-show、ng-hide指令的区别和注意事项

    http://blog.csdn.net/aitangyong/article/details/44701769

  5. tcp ip参数详解

    http://www.cnblogs.com/digdeep/p/4869010.html 1. TCP/IP模型 我们一般知道OSI的网络参考模型是分为7层:“应表会传网数物”——应用层,表示层,会 ...

  6. python模拟登陆之下载

    好长时间没有更新博客了,哈哈. 今天公司给了这么一个需求,现在我们需要去淘宝获取上一天的订单号,然后再根据订单号去另一个接口去获取订单详情,然后再给我展示到web! 中间涉及到的技术点有: 模拟登陆 ...

  7. 关于 Cocoa Pods 的使用

    前提:电脑上已经安装好CocoaPods. 创建Podfile: 1.进入到项目的目录中: $ cd 目录 2.使用终端命令行: $ vim Podfile 3.然后按i键,进入编辑模式 我现在使用的 ...

  8. shell入门之expr的使用 分类: 学习笔记 linux ubuntu 2015-07-10 14:59 76人阅读 评论(1) 收藏

    在expr中加减乘除的使用,脚本如下: #!/bin/sh #a test about expr v1=`expr 5 + 6` echo "$v1" echo `expr 3 + ...

  9. 处理ASP.NET 请求(IIS)(2)

    ASP.NET与IIS是紧密联系的,由于IIS6.0与IIS7.0的工作方式的不同,导致ASP.NET的工作原理也发生了相应的变化. IIS6(IIS7的经典模式)与IIS7的集成模式的不同 IIS6 ...

  10. 关于移动端的Click事件

    在移动端执行Click事件,通常情况出现有300毫秒的延迟,为防止这种不必要的延迟效果,我们可以换种方式来实现,同样达到快速执行Click事件的效果. 先了解一下移动端Click的执行顺序: touc ...