C语言的经典排序算法源码

1、插入排序:插入法是一种比较直观的排序方法。它首先把数组头两个元素排好序,再依次把后面的元素插入适当的位置。把数组元素插完也就完成了排序。代码如下:


#include<stdio.h>
void main()
{
int a[10];
int i,j,k;
printf("请输入10个数字!空格隔开\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=1;i<10;i++)
{
k=a[i];
j=i-1;
while((j>=0)&&(a[j]>k))
{
a[j+1]=a[j];
j--;
}
a[j+1]=k;
}
printf("你输入的数字按照插入排序法由小到大排序后为\n");
for(i=0;i<10;i++)
printf("%d",a[i]);
printf("\n");
}

2、快速排序:快速法定义了三个参数,(数组首地址*a,要排序数组起始元素下标i,要排序数组结束元素下标j). 它首先选一个数组元素(一般为a[(i+j)/2],即中间元素)作为参照,把比它小的元素放到它的左边,比它大的放在右边。然后运用递归,在将它左,右两个子数组排序,最后完成整个数组的排序。代码如下:


#include<stdio.h>
void main()
{
int a[10];
int i;
int p(int a[],int low,int high);
void q(int a[],int low,int high);
printf("请输入10个数字,用空格隔开!!\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);

printf("快速排序法由小到大排序后:\n");
for(i=0;i<10;i++)
printf("%d",a[i]);
int p(int a[],int low,int high);
{
int key=a[low],p;
while(low<high)
{
while(low<high && a[high]>=key)
--high;
p=a[low];a[low]=a[high];a[high]=p;
while(low<high && a[low]<=key)
++low;
p=a[high];a[high]=a[low];a[low]=p;
}
a[low]=key;
return low;
}

void q(int a[],int low,int high);
{
int j;
if(low<high)
{
j=p(a,low,high);
q(a,low,j-1);
q(a,j+1,high);
}
}
}

3、冒泡排序:冒泡法大家都较熟悉。其原理为从a[0]开始,依次将其和后面的元素比较,若a[0]>a[i],则交换它们,一直比较到a[n]。同理对a[1],a[2],...a[n-1]处理,即完成排序。代码如下:


#include<stdio.h>
void main()
{
int a[10];
int i,j,k;
printf("请输入10个数,用空格隔开!!\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<9;i++)
for(j=0;j<9-i;j++)
if(a[j]>a[j+1])
{
k=a[j];
a[j]=a[j+1];
a[j+1]=k;
}
printf("冒泡排序法由小到大排序后:\n");
for(i=0;i<10;i++)
printf("%d",a[i]);
printf("\n");
}

4、希尔排序:shell法是一个叫 shell 的美国人与1969年发明的。它首先把相距k(k>=1)的那几个元素排好序,再缩小k值(一般取其一半),再排序,直到k=1时完成排序。代码如下:


#include<stdio.h>
void main()
{
int a[10];
int i,j,k=9,t;
printf("请输入10个数字:之间用空格隔开!!!\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
while(k>0)
{
for(i=k;i<10;i++)
{
j=i-k;
while(j>=0)
if(a[j]>a[j+k])
{
t=a[j];
a[j]=a[j+k];
a[j+k]=t;
}
else break;
}
k/=2;
}
printf("你输入的数字希尔排序由小到大排序为:\n");
for(i=0;i<10;i++)
printf("%4d",a[i]);
printf("\n");
}

5、选择排序:选择法循环过程与冒泡法一致,它还定义了记号k=i,然后依次把a[k]同后面元素比较,若a[k]>a[j],则使k=j.最后看看k=i是否还成立,不成立则交换a[k],a[i],这样就比冒泡法省下许多无用的交换,提高了效率。代码如下:


#include<stdio.h>
void main()
{
int a[10];
int i,j,k,m;
printf("请输入10个数字,数字间用空格隔开!!\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<9;i++)
{
k=i;
for(j=i+1;j<10;j++)
if(a[k]>a[j])
k=j;
if(k!=i)
{
m=a[i];
a[i]=a[k];
a[k]=m;
}
}
printf("由选择法由小到大排序后:\n");
for(i=0;i<10;i++)
printf("%d",a[i]);
printf("\n");
}

时间: 2024-10-15 05:46:15

C语言的经典排序算法源码的相关文章

PHP四大经典排序算法源码

--仅供参考 欢迎点评 <?php header("Content-Type:text/html; charset=utf-8"); // **************************************************************** //快速排序:每次取一个比较值$key(即相应数组的$arr[0]),然后依次比较数组中的数,比比较值大的放右边并重命名为$right[],比比较值小的放左边并重命名为$left[].再递归调用函数最后将$left

八大排序算法源码 + 耗时长度比较(看到好东西转下)

八大排序算法的排序时间长度的比较,测试数据10000000时部分结果如下 输入测试数据长度: 10000000数据初始化中...数据初始化完成!        堆排序用时:    8秒 499毫秒      快速排序用时:   22秒  35毫秒      归并排序用时:   34秒 473毫秒 另外五种排序本人并未等待结果,读者可自行测试 测试时请注意内存消耗,以免数据太大,内存不够,可自行测试单一算法以便增加可测试数据数目 #include <iostream> #include <

【最全】经典排序算法(C语言)

本文章包括所有基本排序算法(和其中一些算法的改进算法): 直接插入排序.希尔排序.直接选择排序.堆排序.冒泡排序.快速排序.归并排序.基数排序. 算法复杂度比较: 算法分类 一.直接插入排序 一个插入排序是另一种简单排序,它的思路是:每次从未排好的序列中选出第一个元素插入到已排好的序列中. 它的算法步骤可以大致归纳如下: 从未排好的序列中拿出首元素,并把它赋值给temp变量: 从排好的序列中,依次与temp进行比较,如果元素比temp大,则将元素后移(实际上放置temp的元素位置已经空出) 直到

Jerry 2017年的五一小长假:8种经典排序算法的ABAP实现

2017年4月29日~5月1日,国际劳动节, 三天的小长假. 在国内,小长假往往是这样的: 然而我当时在戏称为"德村"(德国农村)的Walldorf出差并且住在Wiesloch, 这里的五一小长假能听见鸟叫,虫鸣,和风吹过的声音,除此之外再无其他. 街道上别说行人了,连行驶的汽车都很少. 如果一个在成都习惯了热闹生活的人,到了这种乡下地方来估计会觉得百无聊赖.当时国内有同事建议我小长假去德国其他地方转转,然而作为一个30年资深宅男,一个人出去转不是我的风格. 五一放假之前,坐我对面的一

经典排序算法的PHP实现类

近期广受笔试摧残,对于各种排序也是晕头转向. 更坑爹的是貌似大多都是用C++.Java实现相关算法,让我搞PHP的情何以堪,更何况,PHP本身就有排序函数sort(),其实来说,是很简单的,这也可能是为什么不用PHP进行排序吧. 但考虑到PHP毕竟也是一门面向对象的语言吧,我们利用原生的语法,也是可以实现经典排序算法的,先不说性能如何,切不要妄自菲薄吧. 下面为具体的经典排序算法的PHP实现类. <?php /** * Author: helen * CreateTime: 2016/4/15

经典排序算法总结与实现 ---python

原文:http://wuchong.me/blog/2014/02/09/algorithm-sort-summary/ 经典排序算法在面试中占有很大的比重,也是基础,为了未雨绸缪,在寒假里整理并用Python实现了七大经典排序算法,包括冒泡排序,插入排序,选择排序,希尔排序,归并排序,快速排序,堆排序.希望能帮助到有需要的同学.之所以用Python实现,主要是因为它更接近伪代码,能用更少的代码实现算法,更利于理解. 本篇博客所有排序实现均默认从小到大. 一.冒泡排序 BubbleSort 介绍

一文搞定十大经典排序算法(Java实现)

本文总结十大经典排序算法及变形,并提供Java实现. 参考文章: 十大经典排序算法总结(Java语言实现) 快速排序算法—左右指针法,挖坑法,前后指针法,递归和非递归 快速排序及优化(三路划分等) 一.排序算法概述 1.定义 将杂乱无章的数据元素,通过一定的方法按关键字顺序排列的过程叫做排序. 2.分类 十种常见排序算法可以分为两大类: 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序. 线性时间非比较类排序:不通过比较

java实现经典排序算法

前言 博主最近在恶补基础知识,算法必然是必不可少的,那么就从经典排序算法开始吧!(图源网络,侵删),没有列出全部,因为在期末考试囧 代码太多,就只显示了最关键的部分 1. 冒泡排序 实现思路: (1)比较前后相邻的二个数据,如果前面数据大于后面的数据,就将这二个数据交换. (2)这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就"沉"到数组第 N-1个位置. (3)N=N-1,如果N不为 0就重复前面二步,否则排序完成. 这也是博主接触到的第一个排序算法 public

经典排序算法 - 冒泡排序Bubble sort

 原文出自于 http://www.cnblogs.com/kkun/archive/2011/11/23/bubble_sort.html 经典排序算法 - 冒泡排序Bubble sort 原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换, 这样一趟过去后,最大或最小的数字被交换到了最后一位, 然后再从头开始进行两两比较交换,直到倒数第二位时结束,其余类似看例子 例子为从小到大排序, 原始待排序数组| 6 | 2 | 4 | 1 | 5 | 9 | 第一趟排序(外循环) 第