#include <stdio.h>
#include <stdlib.h>
#include <Windows.h> //直接插入排序
void InsertSort(int arry[], int n)
{
int i, j;
int temp;//临时变量
for (i = ; i < n; i++)
{
temp = arry[i];
for (j = i - ; j >= ; j--)
{
if (temp > arry[j])
break;
else
arry[j + ] = arry[j];
}
arry[j+] = temp;
}
} //直接选择排序
void SelectSort(int arry[], int n)
{
int i, j;
int temp;
for (i = ; i < n-; i++)
{
temp = i;
for (j = i + ; j < n; j++)
{
if (arry[j] < arry[temp])
temp = j;
}
if(temp!=i)
arry[temp] ^= arry[i] ^= arry[temp] ^= arry[i];//实现arry[temp]和arry[i]值交换
}
} //冒泡排序
void BubbleSort(int arry[], int n)
{
int i, j, k;
for (i = ; i < n-; i++)
{
for (j = i; j < n; j++)
{
if (arry[j - ]>arry[j])
arry[j - ] ^= arry[j] ^= arry[j - ] ^= arry[j];//实现arry[temp]和arry[i]值交换
}
}
} //希尔排序第一类,
void ShellSort1(int arry[], int n)
{
int i, j, k, gap,temp;
for (gap = n / ; gap > ; gap /= )
{
for (k = ; k < gap; k++)//同组先排
{
for (i = k+gap; i < n; i += gap)
{
temp = arry[i];
for (j = i - gap; j >= ; j -= gap)
{
if (temp > arry[j])
break;
else
arry[j + gap] = arry[j];
}
arry[j + gap] = temp;
}
}
}
} //希尔排序第二类
void ShellSort2(int arry[], int n)
{
int i, j, k, gap, temp;
for (gap = n / ; gap > ; gap /= )
{
for (i = gap; i < n; i++)//所有组一起排序
{
temp = arry[i];
for (j = i - gap; j >= ; j -= gap)
{
if (temp > arry[j])
break;
else
arry[j + gap] = arry[j];
}
arry[j + gap] = temp;
}
}
} //希尔排序,利用gap分组后采用冒泡方式排序
void ShellSort3(int arry[], int n)
{
int i, j, k, gap, temp;
for (gap = n / ; gap > ; gap /= )
{
for (k = ; k < gap; k++)
{
for (i = k; i < n-gap; i += gap)
{
for (j = k+gap; j <n ; j += gap)
{
if (arry[j - gap]>arry[j])
arry[j - gap] ^= arry[j] ^= arry[j - gap] ^= arry[j];
} }
}
}
} //快速排序,递归调用
void QuickSort(int arry[], int s,int t)
{
int i, j; if (s < t)
{
i = s;
j = t+;
while ()
{
do
{
i++;
}while (!(arry[s] <= arry[i] || i >= t));
do
{
j--;
} while (!(arry[s] >= arry[j] || j <= s)); if (i < j)
arry[i] ^= arry[j] ^= arry[i] ^= arry[j]; else
break;
}
if (arry[j]!= arry[s])
arry[j] ^= arry[s] ^= arry[j] ^= arry[s];
QuickSort(arry, s, j-);
QuickSort(arry, j + , t);
}
} int main()
{
int arry1[] = { ,,,,,,,,,,,,,,};
int arry2[] = { ,,,,,,,,,,,,,, };
int arry3[] = { ,,,,,,,,,,,,,, };
int arry4[] = { ,,,,,,,,,,,,,, };
int arry5[] = { ,,,,,,,,,,,,,, };
int arry6[] = { ,,,,,,,,,,,,,, };
int arry7[] = { ,,,,,,,,,,,,,, }; //七种方法任选一种,但效率有别
//一般情况下:快速排序>直接插入>直接选择==冒泡
//希尔排序看情况而定。一般优于直接选择排序 //InsertSort(arry1, 15); //SelectSort(arry2, 15); //BubbleSort(arry3, 15); //ShellSort1(arry4, 15);
//ShellSort2(arry5, 15);
//ShellSort2(arry6, 15); //QuickSort(arry7,0,14); int i = ;
for (i = ; i < ; i++)
{
printf("%d ", arry7[i]);
} system("pause");
}

几种常见的排序方法(C语言实现)的更多相关文章

  1. Java几种常见的排序方法

    日常操作中常见的排序方法有:冒泡排序.快速排序.选择排序.插入排序.希尔排序,甚至还有基数排序.鸡尾酒排序.桶排序.鸽巢排序.归并排序等. 冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一 ...

  2. 几种常见的排序方法总结(Python)

    几种常见的排序算法总结(Python) 排序算法:是一种能将一串数据依照特定顺序进行排序的一种算法. 稳定性:稳定排序算法会让原本有相等键值的记录维持相对次序.也就是如果一个排序算法是稳定的,当有两个 ...

  3. Java中8种常见的排序方法

    排序方法的演示1)插入排序(直接插入排序.希尔排序)2)交换排序(冒泡排序.快速排序)3)选择排序(直接选择排序.堆排序)4)归并排序5)分配排序(基数排序)所需辅助空间最多:归并排序所需辅助空间最少 ...

  4. C# 几种常见的排序方法

    1.冒泡排序 //冒泡排序 public void BubbleSort(int[] list) { int i, j, temp; bool done = false; j = ; while (( ...

  5. C语言中常见的排序方法

    在C语言中,常见的排序方法有冒泡法,排序法,插入法等等.所谓的冒泡法,就是对一组数字进行从大到小或者从小到大的一种排序方法.主要就是相邻的数值相互交换.从第一个数值开始,如果这相邻的两个数值排序与我们 ...

  6. 七种常见经典排序算法总结(C++实现)

    排序算法是非常常见也非常基础的算法,以至于大部分情况下它们都被集成到了语言的辅助库中.排序算法虽然已经可以很方便的使用,但是理解排序算法可以帮助我们找到解题的方向. 1. 冒泡排序 (Bubble S ...

  7. Java中常见的排序方法

    本博主要介绍Java中几种常见的排序算法: /* 排序方法的演示1)插入排序(直接插入排序.希尔排序)2)交换排序(冒泡排序.快速排序)3)选择排序(直接选择排序.堆排序)4)归并排序5)分配排序(基 ...

  8. SQLMAP注入教程-11种常见SQLMAP使用方法详解

    sqlmap也是渗透中常用的一个注入工具,其实在注入工具方面,一个sqlmap就足够用了,只要你用的熟,秒杀各种工具,只是一个便捷性问题,sql注入另一方面就是手工党了,这个就另当别论了.今天把我一直 ...

  9. [转]11种常见sqlmap使用方法详解

    sqlmap也是渗透中常用的一个注入工具,其实在注入工具方面,一个sqlmap就足够用了,只要你用的熟,秒杀各种工具,只是一个便捷性问题,sql注入另一方面就是手工党了,这个就另当别论了.今天把我一直 ...

随机推荐

  1. linux 内核(驱动)常用函数

    2.4.1 内存申请和释放 include/linux/kernel.h里声明了kmalloc()和kfree().用于在内核模式下申请和释放内存.    void *kmalloc(unsigned ...

  2. [转]CentOS开机启动脚本

    转载自http://www.2cto.com/os/201306/220559.html   我的一个Centos开机自启动脚本的制作   一.切换到/etc/init.d/   二.制作sh脚本 v ...

  3. jquery animate 动画效果使用说明

    animate( params, [duration], [easing], [callback] ) 用于创建自定义动画的函数. 这个函数的关键在于指定动画形式及结果样式属性对象.这个对象中每个属性 ...

  4. JS焦点图 上下翻动 支持IE6

    <div class="slider"> <ul class="num" id="homePushName"> &l ...

  5. DevExpress 14.2 批量汉化 以及客户端的汉化

    DXperience汉化方法介绍 运用慧都提供的DXperience汉化包,能将最新版本的DXperience WinForm和ASP.NET控件界面.弹出框.右键菜单等汉化成中文,且能根据自己的需求 ...

  6. FusionCharts X轴显示方式

    本文摘自ITYPE 网站的wangxiao5530 原文网址为:http://wangxiao5530.iteye.com/blog/1454200 1)Wrap Mode (换行模式) <ch ...

  7. php中关于抽象(abstract)类和抽象方法的问题解析

    在面向对象(OOP)语言中,一个类可以有一个或多个子类,而每个类都有至少一个公有方法作为外部代码访问的接口.而抽象方法就是为了方便继承而引入的,现在来看一下抽象类和抽象方法分别是如何定义以及他们的特点 ...

  8. shopnc二次开发(一)

    ---恢复内容开始--- 以前没有怎么接触过shopnc,感觉界面挺漂亮的,不过后来自己需要开发一个电商系统,就顺便参考了下,感觉构架垃圾的一塌糊涂.不过平时做这个系统二次开发的业务比较多,所以简单的 ...

  9. python分片

    刚刚学习,很新 >>> numbers = [1,2,3,4,5,6,7,8,9,10] >>> numbers[0:10:2] [1,3,5,7,9] >& ...

  10. 算法系列4《Luhn》

    Luhn算法由IBM的Hans Peter Luhn发明,又称为"模10"算法,是一种简单的校验和算法,用来验证识别号,一般会被用于身份证号码,信用卡号.IMEI号.社会保险号的验 ...