几种常见的排序方法(C语言实现)
#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语言实现)的更多相关文章
- Java几种常见的排序方法
日常操作中常见的排序方法有:冒泡排序.快速排序.选择排序.插入排序.希尔排序,甚至还有基数排序.鸡尾酒排序.桶排序.鸽巢排序.归并排序等. 冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一 ...
- 几种常见的排序方法总结(Python)
几种常见的排序算法总结(Python) 排序算法:是一种能将一串数据依照特定顺序进行排序的一种算法. 稳定性:稳定排序算法会让原本有相等键值的记录维持相对次序.也就是如果一个排序算法是稳定的,当有两个 ...
- Java中8种常见的排序方法
排序方法的演示1)插入排序(直接插入排序.希尔排序)2)交换排序(冒泡排序.快速排序)3)选择排序(直接选择排序.堆排序)4)归并排序5)分配排序(基数排序)所需辅助空间最多:归并排序所需辅助空间最少 ...
- C# 几种常见的排序方法
1.冒泡排序 //冒泡排序 public void BubbleSort(int[] list) { int i, j, temp; bool done = false; j = ; while (( ...
- C语言中常见的排序方法
在C语言中,常见的排序方法有冒泡法,排序法,插入法等等.所谓的冒泡法,就是对一组数字进行从大到小或者从小到大的一种排序方法.主要就是相邻的数值相互交换.从第一个数值开始,如果这相邻的两个数值排序与我们 ...
- 七种常见经典排序算法总结(C++实现)
排序算法是非常常见也非常基础的算法,以至于大部分情况下它们都被集成到了语言的辅助库中.排序算法虽然已经可以很方便的使用,但是理解排序算法可以帮助我们找到解题的方向. 1. 冒泡排序 (Bubble S ...
- Java中常见的排序方法
本博主要介绍Java中几种常见的排序算法: /* 排序方法的演示1)插入排序(直接插入排序.希尔排序)2)交换排序(冒泡排序.快速排序)3)选择排序(直接选择排序.堆排序)4)归并排序5)分配排序(基 ...
- SQLMAP注入教程-11种常见SQLMAP使用方法详解
sqlmap也是渗透中常用的一个注入工具,其实在注入工具方面,一个sqlmap就足够用了,只要你用的熟,秒杀各种工具,只是一个便捷性问题,sql注入另一方面就是手工党了,这个就另当别论了.今天把我一直 ...
- [转]11种常见sqlmap使用方法详解
sqlmap也是渗透中常用的一个注入工具,其实在注入工具方面,一个sqlmap就足够用了,只要你用的熟,秒杀各种工具,只是一个便捷性问题,sql注入另一方面就是手工党了,这个就另当别论了.今天把我一直 ...
随机推荐
- Android自定义样式
1.AndroidManifest.xml android:theme="@style/Theme.CustomDialog 样式要用:@style <?xml version=&qu ...
- Android IOS WebRTC 音视频开发总结(四六)-- 从另一个角度看国内首届WebRTC大会
文章主要从开发者角度谈国内首届WebRTC大会,支持原创,文章来自博客园RTC.Blacker,支持原创,转载必须说明出处,更多详见www.rtc.help. -------------------- ...
- select 语句占位符
对于已预备的语句,可以使用位置保持符.以下语句将从tb1表中返回一行: mysql> SET @a=1; mysql> PREPARE STMT FROM "SELECT * F ...
- javascript绑定时间 含(IE)
script language = "javascript" type = "text/javascript"> function test(){ win ...
- 1)C++对象大小计算
C++对象的大小不同的编译器的实现是不一样的,以下仅讨论.net2003,其他编译的可能出现的结果以下也做了分析和猜测.在反推不同编译器实现的C++对象的大小时.对齐是一个很重要也容易被遗 ...
- Windows7不能打开telnet功能
在dos窗口中输入telnet命令提示如下: 解决方法是打开控制面板中的程序和功能,选择打开或关闭Window是功能,如下: 勾选上面的Telnet客户端,然后确定,出现下图.稍等片刻重新打开命令行, ...
- delphi 基础之三 文件流操作
文件流操作 Delphi操作流文件:什么是流?流,简单来说就是建立在面向对象基础上的一种抽象的处理数据的工具.在流中,定义了一些处理数据的基本操作,如读取数据,写入数据等,程序员是对流进行所有操作的, ...
- 使用@media做自适应
@media (min-width: 768px){ //>=768的设备 } @media (max-width: 1199){ //<=1199的设备 }
- LINUX开启允许对外访问的网络端口
LINUX开启允许对外访问的网络端口 LINUX通过下面的命令可以开启允许对外访问的网络端口: /sbin/iptables -I INPUT -p tcp --dport 8000 -j ACCE ...
- 自学Python一 迷茫中的开端!
有心学习一下Python,多门技术多条路啊.经历了找教程,看代码,写demo,这东西入门容易精通难啊!又因为请了两周婚假彻底忘光光.想了想自己还是边复习边写点什么东西吧.很多技术,新东西都是看了n多, ...