之前熟悉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. mapreduce 读写lzo文件

    1.读lzo文件 需要添加以下代码,并导入lzo相关的jar包  job.setInputFormatClass(LzoTextInputFormat.class); 2.写lzo文件 lzo格式默认 ...

  2. BufferedInputStream,FileInputStream,FileChannel实现文件拷贝

    从上篇文章中知道BufferedInputStream是自带缓冲区的输入流,可以大大减少IO次数,提供效率.下面的例子中实现了用BufferedInputStream与FileInputStream实 ...

  3. IAAS云计算产品畅想-云主机产品内涵

    这里所涉及的主要还是狭义的云主机产品. 主要还是谈云主机产品中公有云产品与私有云产品相比赋予更多的含义: 产品广义理解:公有云主机的最大特点就是基础资源按需支付 从这一句话中可以体现出来两个含义: 产 ...

  4. 谈一下怎样设计Oracle 分区表

    在谈设计Oracle分区表之间先区分一下分区表和表空间的个概念: 表空间:表空间是一个或多个数据文件的集合,全部数据对象都存放在指定的表空间中,但主要存放表,故称表空间. 分区表:分区致力于解决支持极 ...

  5. Handler具体解释系列(四)——利用Handler在主线程与子线程之间互发消息

    MainActivity例如以下: package cc.c; import android.app.Activity; import android.os.Bundle; import androi ...

  6. [React] React Fundamentals: with-addons - ReactLink

    It can be tedious to type out all the boilerplate needed to get the DOM and states in React to synch ...

  7. Android中GridView拖拽的效果

    最 近看到联想,摩托罗拉等,手机launcher中有个效果,进入mainmenu后,里面的应用程序的图标可以拖来拖去,所以我也参照网上给的代码,写了 一个例子.还是很有趣的,实现的流畅度没有人家的那么 ...

  8. linux可重入、异步信号安全和线程安全

    一 可重入函数 当一个被捕获的信号被一个进程处理时,进程执行的普通的指令序列会被一个信号处理器暂时地中断.它首先执行该信号处理程序中的指令.如果从信号处理程序返回(例如没有调用exit或longjmp ...

  9. 使用AVCaptureSession捕捉视频

    #import <UIKit/UIKit.h> #import <AVFoundation/AVFoundation.h> #import <AssetsLibrary/ ...

  10. CSS定位:相对定位、绝对定位和固定定位(relative absolute fixed)

    相对定位:position:relative; 不脱离文档流,参考自身静态位置通过top,bottom,left,right定位,并且可通过z-index进行层次分级. 绝对定位:position:a ...