常用排序算法集合-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实现
写在前面:纸上得来终觉浅.基本排序算法的思想,可能很多人都说的头头是到,但能说和能写出来,真的还是有很大区别的. 今天整理了一下各种常用排序算法,当然还不全,后面会继续补充.代码中可能有累赘或错误的地 ...
随机推荐
- Django教程:第一个Django应用程序(4)
Django教程:第一个Django应用程序(4) 2013-10-09 磁针石 #承接软件自动化实施与培训等gtalk:ouyangchongwu#gmail.comqq 37391319 #博客: ...
- C++ —— 时间与日期
导读 在平时编程中有时需要获取当前的时间或者日期,然而不同的平台不同的场景下,有时使用的API也不尽相同.一般来说,C/C++中关于时间的标准库函数在不同的平台的都可以使用,可一些与平台相关的函数就只 ...
- bzoj2132: 圈地计划
要分成两坨对吧.. 所以显然最小割 但是不兹辞啊.. 最小割是最小的啊 求最大费用怎么玩啊 那咱们就把所有费用都加起来,减掉一个最小的呗 但是两个属于不同集合的点贡献的价值是负的啊 网络流怎么跑负的啊 ...
- jquery 的小角落
最近换了工作,在这家公司里,使用了大量的jQuery,闲来无事看看锋利的jQuery,发现好多边边角角的选择器,却能省去一大堆逻辑上的的代码,废话不多说直接上代码. #### jquery 对象与do ...
- 开发库比较(3) - Mobile Web 开发 - Sencha, jquerymobiel, phonejs, jqtouch, jqmobi
我们一直坚信Html/css在界面上最终会一统江湖,因为在众多的界面编写中,qt,gtk,wpf,win form, wxwidgets等等,只有Html/CSS是真正拥有统一标准,只有这个有潜力作用 ...
- 谈一下怎样设计Oracle 分区表
在谈设计Oracle分区表之间先区分一下分区表和表空间的个概念: 表空间:表空间是一个或多个数据文件的集合,全部数据对象都存放在指定的表空间中,但主要存放表,故称表空间. 分区表:分区致力于解决支持极 ...
- 如何在word2007中并排查看对比显示两个文档
使用word编辑或修改文件时,有时会需要对两个文档进行对比,此时就应该使用并排查看功能. 点击“视图”菜单中的“并排查看” 所打开的两个文档就会同时打开,并排显示 可点击“同步滚动”设置或取消同步滚动
- [置顶] 提高生产力:开源Java工具包Jodd(Java的”瑞士军刀”)
官方网站:http://jodd.org/ 下载地址:http://jodd.org/download/index.html Jodd=tools + ioc + mvc + db + aop + t ...
- Bash函数使用
#!/bin/bash function Fun_Name() { #function here echo "this is a function" } Fun_Name
- 发现并认为这是jQuery1.4.4的一个Bug
说起来还觉得丢人,公司的系统开发了两年,目前jquery的版本还是用的1.4.4. mantis上的Bug一堆,今天在改bug的时候发现一个jQuery的Bug. 改bug嘛,一开始总是各种调试,总感 ...