常用排序算法集合-C实现
之前熟悉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实现的更多相关文章
- Java常用排序算法及性能测试集合
测试报告: Array length: 20000 bubbleSort : 573 ms bubbleSortAdvanced : 596 ms bubbleSortAdvanced2 : 583 ...
- C++进阶 STL(3) 第三天 函数对象适配器、常用遍历算法、常用排序算法、常用算数生成算法、常用集合算法、 distance_逆序遍历_修改容器元素
01昨天课程回顾 02函数对象适配器 函数适配器是用来让一个函数对象表现出另外一种类型的函数对象的特征.因为,许多情况下,我们所持有的函数对象或普通函数的参数个数或是返回值类型并不是我们想要的,这时候 ...
- 常用排序算法的python实现和性能分析
常用排序算法的python实现和性能分析 一年一度的换工作高峰又到了,HR大概每天都塞几份简历过来,基本上一天安排两个面试的话,当天就只能加班干活了.趁着面试别人的机会,自己也把一些基础算法和一些面试 ...
- 面试中常用排序算法实现(Java)
当我们进行数据处理的时候,往往需要对数据进行查找操作,一个有序的数据集往往能够在高效的查找算法下快速得到结果.所以排序的效率就会显的十分重要,本篇我们将着重的介绍几个常见的排序算法,涉及如下内容: 排 ...
- 第四百一十五节,python常用排序算法学习
第四百一十五节,python常用排序算法学习 常用排序 名称 复杂度 说明 备注 冒泡排序Bubble Sort O(N*N) 将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮 ...
- Java常用排序算法+程序员必须掌握的8大排序算法+二分法查找法
Java 常用排序算法/程序员必须掌握的 8大排序算法 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排 ...
- 转载部长一篇大作:常用排序算法之JavaScript实现
转载部长一篇大作:常用排序算法之JavaScript实现 注:本文是转载实验室同门王部长的大作,找实习找工作在即,本文颇有用处!原文出处:http://www.cnblogs.com/ywang172 ...
- Java 常用排序算法/程序员必须掌握的 8大排序算法
Java 常用排序算法/程序员必须掌握的 8大排序算法 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配 ...
- 常用排序算法java实现
写在前面:纸上得来终觉浅.基本排序算法的思想,可能很多人都说的头头是到,但能说和能写出来,真的还是有很大区别的. 今天整理了一下各种常用排序算法,当然还不全,后面会继续补充.代码中可能有累赘或错误的地 ...
随机推荐
- Qt 线程基础(Thread Basics的翻译,线程的五种使用情况)
Qt 线程基础(QThread.QtConcurrent等) 转载自:http://blog.csdn.net/dbzhang800/article/details/6554104 昨晚看Qt的Man ...
- css三角形绘制
三角形演变: 1.将一个块元素的宽.高都设置为0,再设置边框样式,得如下效果图(绿色部分): 样式: {;;border: 35px solid #7de87d;} 通过此样式得到的是一个正方形. 2 ...
- 圣诞节来了,雪花纷飞的CSS3动画
原文链接:http://www.html5think.com/article/index/id/80
- 接口作为参数,不同的接口调用不同的方法,例如:输出“I love Game”或输出“我喜欢游戏”
接口的思想:在于可以增加很多类都需要实现的功能.比如:各式各样的商品,可能隶属不同公司,但工商部门都必须具有显示商标的功能(实现同一接口).商标的具体制作由各个公司自己去实现. 给其他类去实现,不同的 ...
- GCC相关的环境变量
介绍GCC在编译阶段和程序运行阶段用到的环境变量. GCC编译时用到的环境变量 GCC编译时用到的变量. C_INCLUDE_PATH GCC编译时查找头文件的目录列表.比如: echo $C_INC ...
- PHP中的function函数详解
PHP函数,在PHP中函数起到一个不可分割的重要部分,很多功能实现都要用到函数,PHP的最大的威力就来源于函数! 在PHP中内建函数至少有上千个函数.这些内建函数了解就行了,官方文档里面有函数大全:传 ...
- NP-难题
所谓NP-难题,在给定的一个信息系统中,假设研究对象书目为m,属性书目为n,则要考察的属性集P的一个子集是否为最小子集,要进行n*m*m次的比较.而n个属性可构成2的n次方个子集,这些子集都有可能是最 ...
- (转)兼容主流浏览器的CSS透明代码
透明往往能产生不错的网页视觉效果下面是兼容主流浏览器的CSS透明代码.transparent_class { filter:alpha(opacity=50); -moz-opacity:0.5; - ...
- java.util.Random深入理解
java.util.Random next方法的原理 比较好的参考文档: http://isky001.iteye.com/blog/1339979 package random.utilrandom ...
- android menu菜单自动生成
Android提供了一些简单的方法来为应用添加Menu菜单. 提供了三种类型应用菜单: 一.Options Menu:通过Menu按钮调用菜单 1.在/res/目录下新建menu文件夹,用于存储Men ...