#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. 使用/proc实现内核与用户空间通信

    1. 前言   Linux内核空间与用户空间的通信可通过"/proc"目录的文件读写来实现,如果只是控制内核中的参数而不是传输较多数据的话,用“/proc”是很合适的.另外一种内核 ...

  2. 关于URL大小写问题

    关于URL大小写的问题,不同平台的处理不同:Mac OS X 默认的文件系统(HFS case-insensitive) 是不分大小写的,Windows 上的 NTFS 也是,而 Linux 系统常用 ...

  3. SQL 常用方法

    EXCEPT :返回两个结果集的差(即从左查询中返回右查询没有找到的所有非重复值). INTERSECT :返回 两个结果集的交集(即两个查询都返回的所有非重复值). UNION :返回两个结果集的并 ...

  4. 彻底解决_OBJC_CLASS_$_某文件名", referenced from:问题转

    最近在使用静态库时,总是出现这个问题.下面总结一下我得解决方法: 1. .m文件没有导入   在Build Phases里的Compile Sources 中添加报错的文件 2. .framework ...

  5. 安装zabbix

    安装zabbix 1. 准备好lamp架构(安装好mysql,php) 2.在数据库中授权: MariaDB [(none)]> create database zabbix charset u ...

  6. ref和out的区别,值类型和引用类型的使用

    今天刚刚明白ref和out的区别,只限于个人理解如有不同请赐教,谢谢 首先我感觉ref和out是针对于值类型来说,以前一直认为是针对于引用类型看下面的一段代码 1.首先结果 i=0:ints[0]=0 ...

  7. POJ C程序设计进阶 编程题#3 : 排队游戏

    编程题#3:排队游戏 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 在幼儿 ...

  8. windows下如何修改远程登录端口

    windows下如何修改远程登录端口 windows远程桌面默认端口为3389,修改 方法如下:在"开始>运行"中输入"regedit" 点击“确定”,打 ...

  9. C#中List〈string〉和string[]数组之间的相互转换

    1,从System.String[]转到List<System.String> System.String[] str={"str","string" ...

  10. unison+inotify实现文件双向自动同步

    nfs适合存小图片和小文件,有一个致命的缺点,就是其中一台web服务挂掉之后,会直接导致web页面无法访问,动态的那种数据, 而且数据量很大的数据不适合nfs Unison是一款跨平台(window, ...