一些常用的排序算法(C版)
1. 直接插入排序(稳定排序)
简单的说就是将序列分为有序序列和无序序列。每一趟排序都是将无序序列的第一个元素插入有序序列中。R[1… i-1] <- R[i…n] , 每次取R[i]插入到R[1… i-1]中。
步骤如下:
1> 在R[1 … i-1]中找到R[i]的插入位置k (0<k<i)
2> 将R[k … i-1]均后移一位,K位置上插入R[i]
改进版:
1> 在R[1 … i-1]中将R[i]从右向左一一比较,R[j] >R[i],则R[j]后移一位(j = i-1开始)
2> 如果R[j] <=R[i],则j+1 为R[i]的插入位置
#include<stdio.h>
void insert_sort(int a[],int len)
{
int i=,j=,temp=;
for(i=;i<len;i++)
{
temp =a[i];
for(j=i-;j>=&&temp<a[j];j--)
{
a[j+]=a[j];
}
a[j+]=temp;
}
} void print_array(int a[],int len)
{
for(int i=;i<len;i++)
{
printf("a[%d] = %d\n",i ,a[i]);
}
printf("\n");
} int main()
{
int a[]={,,,,,,,,} ;
printf("before sort\n");
print_array(a,sizeof(a)/sizeof(a[]));
insert_sort(a,sizeof(a)/sizeof(a[]));
printf("after sort\n");
print_array(a,sizeof(a)/sizeof(a[]));
return ;
}
2. 冒泡排序(稳定排序)
冒泡排序也叫起泡排序,顾名思义,就是每一趟,从左到右,两两比较,大的(小的)后移,最后最轻的气泡到最后的位置R[i],为最大或最小值,然后下一趟,选出次大的到R[i-1],以此,到最后R[1],至此全部有序。(按照递增递减都可以)
#include<stdio.h> /* ...a[n] ,从a[0]最小开始,*/
void bubble_sort_S2B(int a[],int len)
{
int i,j,temp;
for(i=;i<len-;i++)
{
for(j=;j<len-i-;j++)
{
if(a[j+]<a[j])
{
temp=a[j];
a[j]=a[j+];
a[j+]=temp;
}
}
}
}
void bubble_sort_B2S(int a[],int len)
{
int i,j,temp;
for(i=;i<len-;i++)
{
for(j=;j<len-i-;j++)
{
if(a[j+]>a[j])
{
temp=a[j];
a[j]=a[j+];
a[j+]=temp;
}
}
}
} void print_array(int a[],int len)
{
for(int i=;i<len;i++)
{
printf("a[%d] = %d\n",i ,a[i]);
}
printf("\n");
} int main()
{
int a[]={,,,,,,,,} ;
printf("before sort\n");
print_array(a,sizeof(a)/sizeof(a[]));
bubble_sort_B2S(a,sizeof(a)/sizeof(a[]));
printf("after sort\n");
print_array(a,sizeof(a)/sizeof(a[]));
return ;
}



一些常用的排序算法(C版)的更多相关文章
- 排序算法Java版,以及各自的复杂度,以及由堆排序产生的top K问题
常用的排序算法包括: 冒泡排序:每次在无序队列里将相邻两个数依次进行比较,将小数调换到前面, 逐次比较,直至将最大的数移到最后.最将剩下的N-1个数继续比较,将次大数移至倒数第二.依此规律,直至比较结 ...
- JavaScript实现常用的排序算法
▓▓▓▓▓▓ 大致介绍 由于最近要考试复习,所以学习js的时间少了 -_-||,考试完还会继续的努力学习,这次用原生的JavaScript实现以前学习的常用的排序算法,有冒泡排序.快速排序.直接插入排 ...
- 常用Java排序算法
常用Java排序算法 冒泡排序 .选择排序.快速排序 package com.javaee.corejava; public class DataSort { public DataSort() { ...
- java SE 常用的排序算法
java程序员会用到的经典排序算法实现 常用的排序算法(以下代码包含的)有以下五类: A.插入排序(直接插入排序.希尔排序) B.交换排序(冒泡排序.快速排序) C.选择排序(直接选择排序.堆排序) ...
- C#中常用的排序算法的时间复杂度和空间复杂度
常用的排序算法的时间复杂度和空间复杂度 常用的排序算法的时间复杂度和空间复杂度 排序法 最差时间分析 平均时间复杂度 稳定度 空间复杂度 冒泡排序 O(n2) O(n2) 稳定 O(1) 快速排序 ...
- 数据结构中常用的排序算法 && 时间复杂度 && 空间复杂度
第一部分:数据结构中常用的排序算法 数据结构中的排序算法一般包括冒泡排序.选择排序.插入排序.归并排序和 快速排序, 当然还有很多其他的排序方式,这里主要介绍这五种排序方式. 排序是数据结构中的主要内 ...
- 常用的排序算法介绍和在JAVA的实现(二)
一.写随笔的原因:本文接上次的常用的排序算法介绍和在JAVA的实现(一) 二.具体的内容: 3.交换排序 交换排序:通过交换元素之间的位置来实现排序. 交换排序又可细分为:冒泡排序,快速排序 (1)冒 ...
- 排序总结---常用的排序算法总结,java和js实现
这篇博客对几种常见的排序算法进行归纳总结,在接下来的博客中会依次给出每个排序算法的例子 [由于博客上面进行编辑不太方便,图表都是在电脑上编辑好,上传的图片] 1.排序的分类 2.几种内部排序方法的比较 ...
- 常用的排序算法介绍和在JAVA的实现(一)
一.写随笔的原因:排序比较常用,借此文介绍下排序常用的算法及实现,借此来MARK一下,方便以后的复习.(本人总是忘得比较快) 二.具体的内容: 1.插入排序 插入排序:在前面已经排好序的序列中找到合适 ...
随机推荐
- 安装mongodb的msi步骤
1.首先从官网 http://www.mongodb.org/download 中下载最新的mongodb的文件包 (本人用的是msi文件) 2.打开msi文件,按照步骤依次完成 3.指定服务器端映射 ...
- 莫烦tensorflow(3)-Variable
import tensorflow as tf state = tf.Variable(0,name='counter') one = tf.constant(1) new_value = tf.ad ...
- JAVA线程sleep与wait区别
sleep就是正在执行的线程主动让出cpu,cpu去执行其他线程,在sleep指定的时间过后,cpu才会回到这个线程上继续往下执行,如果当前线程进入了同步锁,sleep方法并不会释放锁,即使当前线程使 ...
- idea创建maven spring项目,出现的问题
1.jetty启动后,明明配置文件配置的是 <plugin> <groupId>org.eclipse.jetty</groupId> <artifactId ...
- chrome插件 - Manifest文件中的 background
在Manifest中指定background域可以使扩展常驻后台. background可以包含三种属性,分别是scripts.page和persistent. 如果指定了scripts属性,则Chr ...
- block-chain
维护一条链,只能增加记录,不能删除.修改. 去中心化,达到共识 密码学,保证交易无法抵赖和破坏 共识机制 PoW(Proof of Work),工作量证明,是一个博弈论的应用,来防止作恶. 示例:两个 ...
- dubbo ActivateExtension
对于集合类扩展点,比如:Filter, InvokerListener, ExportListener, TelnetHandler, StatusChecker等, 可以同时加载多个实现,此时,可以 ...
- J - FatMouse's Speed
p的思路不一定要到最后去找到ans:也可以设置成在中间找到ans:比如J - FatMouse's Speed 这个题,如果要是让dp[n]成为最终答案的话,即到了i,最差的情况也是dp[i-1],就 ...
- 添加aimate动画
.page3_ship{ background:url(../image/boat_02.png) 0 center no-repeat; background-size: 486px 385px; ...
- 单调栈的运用-bzoj1012(代码转载-http://hzwer.com/1130.html)
Description 现在请求你维护一个数列,要求提供以下两种操作: . 查询操作.语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值.限制:L不超过当前数列的长度. . 插 ...