实在没事搞,反正面试也要用到,继续来写4种排序算法。因为那天用java写了排序,突然想到我是要面试IOS,起码也得用C写。C竟然忘干净了,方法都不会写了。囧啊!

下面用C实现4种排序算法:快速排序、冒泡排序、选择排序、插入排序。(我是用Xcode写的)

1、快速排序

什么都不说了直接上代码吧:

#pragma -mark 快速排序
void quickSort(int array[],int low,int high)
{
if (array == NULL) {
return;
}
if (low >= high) {
return;
} //取中值
int middle = low +(high - low)/2;
int prmt = array[middle]; //开始排序使得left < prmt 同时右边的大于 prmt
int i = low,j = high;
while (i <= j) {
while (array[i] < prmt) {
i++;
}
while (array[j] > prmt) {
j--;
}
if (i <= j) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
i++;
j--;
} printf("排序中:");
printArray(array,7);
} //对左边的进行排序处理
if (low < j) {
quickSort(array, low, j);
}
if (high > i) {
quickSort(array, i, high);
} }

快速排序过程如下:

排序前:9 2 10 7 3 7 4
排序中:4 2 10 7 3 7 9
排序中:4 2 7 7 3 10 9
排序中:4 2 7 3 7 10 9
排序中:2 4 7 3 7 10 9
排序中:2 4 3 7 7 10 9
排序中:2 3 4 7 7 10 9
排序中:2 3 4 7 7 9 10
排序中:2 3 4 7 7 9 10
排序后:2 3 4 7 7 9 10

2、冒泡排序

还是直接上代码吧,代码君在下面:

#pragma -mark 冒泡排序
void buddleSort(int *array,int length)
{
if (array == NULL) {
return;
} for (int i = 1; i < length; i++) {
for (int j = 0; j < length - i; j++) {
if (array[j] > array[j+1]) {
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
} printf("排序中:");
printArray(array,length);
}
}
}

冒泡排序的过程如下:

排序前:9 2 10 7 3 7 4
排序中:2 9 10 7 3 7 4
排序中:2 9 10 7 3 7 4
排序中:2 9 7 10 3 7 4
排序中:2 9 7 3 10 7 4
排序中:2 9 7 3 7 10 4
排序中:2 9 7 3 7 4 10
排序中:2 9 7 3 7 4 10
排序中:2 7 9 3 7 4 10
排序中:2 7 3 9 7 4 10
排序中:2 7 3 7 9 4 10
排序中:2 7 3 7 4 9 10
排序中:2 7 3 7 4 9 10
排序中:2 3 7 7 4 9 10
排序中:2 3 7 7 4 9 10
排序中:2 3 7 4 7 9 10
排序中:2 3 7 4 7 9 10
排序中:2 3 7 4 7 9 10
排序中:2 3 4 7 7 9 10
排序中:2 3 4 7 7 9 10
排序中:2 3 4 7 7 9 10
排序中:2 3 4 7 7 9 10
排序后:2 3 4 7 7 9 10

3、选择排序

代码君,你在哪里:

#pragma -mark 选择排序
void selectSort(int array[],int length)
{
if (array == NULL) {
return;
}
int min_index;
for (int i = 0; i< length; i++) {
min_index = i;
for (int j = i+1; j < length; j++) {
if (array[j] < array[min_index]) {
int temp = array[j];
array[j] = array[min_index];
array[min_index] = temp;
} printf("排序中:");
printArray(array,length);
}
} }

选择排序的过程如下:

排序前:9 2 10 7 3 7 4
排序中:2 9 10 7 3 7 4
排序中:2 9 10 7 3 7 4
排序中:2 9 10 7 3 7 4
排序中:2 9 10 7 3 7 4
排序中:2 9 10 7 3 7 4
排序中:2 9 10 7 3 7 4
排序中:2 9 10 7 3 7 4
排序中:2 7 10 9 3 7 4
排序中:2 3 10 9 7 7 4
排序中:2 3 10 9 7 7 4
排序中:2 3 10 9 7 7 4
排序中:2 3 9 10 7 7 4
排序中:2 3 7 10 9 7 4
排序中:2 3 7 10 9 7 4
排序中:2 3 4 10 9 7 7
排序中:2 3 4 9 10 7 7
排序中:2 3 4 7 10 9 7
排序中:2 3 4 7 10 9 7
排序中:2 3 4 7 9 10 7
排序中:2 3 4 7 7 10 9
排序中:2 3 4 7 7 9 10
排序后:2 3 4 7 7 9 10

4、插入排序

继续上代码了:

#pragma -mark 插入排序
void insertSort(int array[],int length)
{
if (array == NULL) {
return;
}
for (int i = 1; i < length; i++) {
int temp = array[i];
int j = i-1; while (j >= 0 && array[j] > temp) {
array[j+1] = array[j];
j--; printf("排序中:");
printArray(array,length);
}
array[j+1] = temp;
} }

插入排序的过程如下:

排序前:9 2 10 7 3 7 4
排序中:9 9 10 7 3 7 4
排序中:2 9 10 10 3 7 4
排序中:2 9 9 10 3 7 4
排序中:2 7 9 10 10 7 4
排序中:2 7 9 9 10 7 4
排序中:2 7 7 9 10 7 4
排序中:2 3 7 9 10 10 4
排序中:2 3 7 9 9 10 4
排序中:2 3 7 7 9 10 10
排序中:2 3 7 7 9 9 10
排序中:2 3 7 7 7 9 10
排序中:2 3 7 7 7 9 10
排序后:2 3 4 7 7 9 10

最后,附上整个类文件吧!

//
// main.c
// SortUtil
//
// Created by Mac on 14-4-16.
// Copyright (c) 2014年 KnightKing. All rights reserved.
// #include <stdio.h> //打印数组
void printArray(int *array,int len)
{
for(int i = 0;i<len;i++){
printf("%d ",array[i]);
}
printf("\n");
} #pragma -mark 冒泡排序
void buddleSort(int *array,int length)
{
if (array == NULL) {
return;
} for (int i = 1; i < length; i++) {
for (int j = 0; j < length - i; j++) {
if (array[j] > array[j+1]) {
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
} printf("排序中:");
printArray(array,length);
}
}
} #pragma -mark 快速排序
void quickSort(int array[],int low,int high)
{
if (array == NULL) {
return;
}
if (low >= high) {
return;
} //取中值
int middle = low +(high - low)/2;
int prmt = array[middle]; //开始排序使得left < prmt 同时右边的大于 prmt
int i = low,j = high;
while (i <= j) {
while (array[i] < prmt) {
i++;
}
while (array[j] > prmt) {
j--;
}
if (i <= j) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
i++;
j--;
} printf("排序中:");
printArray(array,7);
} //对左边的进行排序处理
if (low < j) {
quickSort(array, low, j);
}
if (high > i) {
quickSort(array, i, high);
} } #pragma -mark 选择排序
void selectSort(int array[],int length)
{
if (array == NULL) {
return;
}
int min_index;
for (int i = 0; i< length; i++) {
min_index = i;
for (int j = i+1; j < length; j++) {
if (array[j] < array[min_index]) {
int temp = array[j];
array[j] = array[min_index];
array[min_index] = temp;
} printf("排序中:");
printArray(array,length);
}
} } #pragma -mark 插入排序
void insertSort(int array[],int length)
{
if (array == NULL) {
return;
}
for (int i = 1; i < length; i++) {
int temp = array[i];
int j = i-1; while (j >= 0 && array[j] > temp) {
array[j+1] = array[j];
j--; printf("排序中:");
printArray(array,length);
}
array[j+1] = temp;
} } int main(int argc, const char * argv[])
{ int a[] = {9,2,10,7,3,7,4};
int length = 7; printf("排序前:");
printArray(a,length); //快速排序
// quickSort(a, 0, 6);
//冒泡排序
// buddleSort(a,length);
//选择排序
// selectSort(a, length);
//插入排序
insertSort(a, length); printf("排序后:");
printArray(a,length); return 0;
}

C语言实现4种常用排序的更多相关文章

  1. 我们一起来排序——使用Java语言优雅地实现常用排序算法

    破阵子·春景 燕子来时新社,梨花落后清明. 池上碧苔三四点,叶底黄鹂一两声.日长飞絮轻. 巧笑同桌伙伴,上学径里逢迎. 疑怪昨宵春梦好,元是今朝Offer拿.笑从双脸生. 排序算法--最基础的算法,互 ...

  2. 【Algorithm】九种常用排序的性能分析

    最近间间断断的将9种排序算法用C实现,并且将其以博客笔记的形式记录下来,其中各个排序算法的描述部分特别参考了CSDN上太阳落雨的博客!现在就该来综合的分析这九种排序,让我们先来看看其算法复杂度和稳定性 ...

  3. 几种常用排序算法的python实现

    1:快速排序 思想: 任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序. 一趟快速排序的算法是: 1)设置 ...

  4. Java种八种常用排序算法

    1 直接插入排序 经常碰到这样一类排序问题:把新的数据插入到已经排好的数据列中. 将第一个数和第二个数排序,然后构成一个有序序列 将第三个数插入进去,构成一个新的有序序列. 对第四个数.第五个数……直 ...

  5. java实现几种常用排序:冒泡排序

    一.冒泡排序介绍 冒泡排序是我们得最多的排序方式之一,原因是简单易实现,且原理易懂.顾名思义,冒泡排序,它的排序过程就像水中的气泡一样,一个一个上浮到水面. 二.冒泡排序原理分析 三.冒泡排序代码实现 ...

  6. 用 Java 实现的八种常用排序算法

    八种排序算法可以按照如图分类 交换排序 所谓交换,就是序列中任意两个元素进行比较,根据比较结果来交换各自在序列中的位置,以此达到排序的目的. 1. 冒泡排序 冒泡排序是一种简单的交换排序算法,以升序排 ...

  7. 几种常用排序算法代码实现和基本优化(持续更新ing..)

    插入排序(InsertSort): 插入排序的基本思想:元素逐个遍历,在每次遍历的循环中,都要跟之前的元素做比较并“交换”元素,直到放在“合适的位置上”. 插入排序的特点:时间复杂度是随着待排数组的有 ...

  8. java实现几种常用排序:选择排序

    一.选择排序介绍 选择排序,顾名思义就是用逐个选择的方式来进行排序,逐个选择出数组中的最大(或最小)的元素,直到选择至最后一个元素.此时数组完成了排序. 二.选择排序原理分析 三.选择排序代码实现 / ...

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

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

随机推荐

  1. Spring消息之JMS.

    一.概念 异步消息简介 与远程调用机制以及REST接口类似,异步消息也是用于应用程序之间通信的. RMI.Hessian.Burlap.HTTP invoker和Web服务在应用程序之间的通信机制是同 ...

  2. Python中如何自定义一个计时器

    import time as t class MyTimer(): # 初始化构造函数 def __init__(self): self.prompt = "未开始计时..." s ...

  3. Codeforces Round #417 (Div. 2)-A. Sagheer and Crossroad

    [题意概述] 在一个十字路口 ,给定红绿灯的情况, 按逆时针方向一次给出各个路口的左转,直行,右转,以及行人车道,判断汽车是否有可能撞到行人 [题目分析] 需要在逻辑上清晰,只需要把所有情况列出来即可 ...

  4. MySQL 连接的使用

    MySQL 连接的使用 在前几章节中,我们已经学会了如果在一张表中读取数据,这是相对简单的,但是在真正的应用中经常需要从多个数据表中读取数据. 本章节我们将向大家介绍如何使用 MySQL 的 JOIN ...

  5. Android的四大组件及应用安装安全问题(4)

    Android的四大组件及组件间通信 如果想对四大组件有深入的了解,那永远不要停留在一些条条干干的SDK API的认识,需要了解他的通讯,他的复用,他的边界问题,这样才会对四大组件有透明的认识. 四大 ...

  6. 计算机网络之动态主机配置协议DHCP

    为了将软件协议做成通用的和便于移植,协议软件的编写者不会把所有细节都固定在源代码中,而是把协议软件参数化,这就使得在很多台计算机上使用同一个经过编译的二进制代码成为可能. 一台计算机和另一台计算机的区 ...

  7. 干货!Android Studio快捷键VS Eclipse快捷键~亲测!

    eclipse as 英文描述 中文描述 ctrl+shift+r ctrl+shift+r Navigate->File 找工作空间的文件 ctrl+shift+t ctrl+shift+t ...

  8. [OpenCV]拓展图像边界

    图像处理中经常遇到使用当前像素邻的像素来计算当前像素位置的某些属性值,这样就会导致边界像素处越界访问,一般有两种方法解决这种问题:只对不越界的像素进行处理:对图像边界进行拓展,本文主要介绍如何使用Op ...

  9. Swift:Foundation框架中的NS前缀的由来

    可能大家对于著名的NS前缀的由来有一些疑问. 绝大多数这些NS前缀的类是NeXTSTEP操作系统中Foundation框架里的一部分,而该操作系统是OS X的基础. NeXTSTEP的程序员对它们的类 ...

  10. [转]django-registration quickstart

    Basic configuration and use--------------------------- Once installed, you can add django-registrati ...