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版)的更多相关文章

  1. 排序算法Java版,以及各自的复杂度,以及由堆排序产生的top K问题

    常用的排序算法包括: 冒泡排序:每次在无序队列里将相邻两个数依次进行比较,将小数调换到前面, 逐次比较,直至将最大的数移到最后.最将剩下的N-1个数继续比较,将次大数移至倒数第二.依此规律,直至比较结 ...

  2. JavaScript实现常用的排序算法

    ▓▓▓▓▓▓ 大致介绍 由于最近要考试复习,所以学习js的时间少了 -_-||,考试完还会继续的努力学习,这次用原生的JavaScript实现以前学习的常用的排序算法,有冒泡排序.快速排序.直接插入排 ...

  3. 常用Java排序算法

    常用Java排序算法 冒泡排序 .选择排序.快速排序 package com.javaee.corejava; public class DataSort { public DataSort() { ...

  4. java SE 常用的排序算法

    java程序员会用到的经典排序算法实现 常用的排序算法(以下代码包含的)有以下五类: A.插入排序(直接插入排序.希尔排序) B.交换排序(冒泡排序.快速排序) C.选择排序(直接选择排序.堆排序) ...

  5. C#中常用的排序算法的时间复杂度和空间复杂度

    常用的排序算法的时间复杂度和空间复杂度   常用的排序算法的时间复杂度和空间复杂度 排序法 最差时间分析 平均时间复杂度 稳定度 空间复杂度 冒泡排序 O(n2) O(n2) 稳定 O(1) 快速排序 ...

  6. 数据结构中常用的排序算法 && 时间复杂度 && 空间复杂度

    第一部分:数据结构中常用的排序算法 数据结构中的排序算法一般包括冒泡排序.选择排序.插入排序.归并排序和 快速排序, 当然还有很多其他的排序方式,这里主要介绍这五种排序方式. 排序是数据结构中的主要内 ...

  7. 常用的排序算法介绍和在JAVA的实现(二)

    一.写随笔的原因:本文接上次的常用的排序算法介绍和在JAVA的实现(一) 二.具体的内容: 3.交换排序 交换排序:通过交换元素之间的位置来实现排序. 交换排序又可细分为:冒泡排序,快速排序 (1)冒 ...

  8. 排序总结---常用的排序算法总结,java和js实现

    这篇博客对几种常见的排序算法进行归纳总结,在接下来的博客中会依次给出每个排序算法的例子 [由于博客上面进行编辑不太方便,图表都是在电脑上编辑好,上传的图片] 1.排序的分类 2.几种内部排序方法的比较 ...

  9. 常用的排序算法介绍和在JAVA的实现(一)

    一.写随笔的原因:排序比较常用,借此文介绍下排序常用的算法及实现,借此来MARK一下,方便以后的复习.(本人总是忘得比较快) 二.具体的内容: 1.插入排序 插入排序:在前面已经排好序的序列中找到合适 ...

随机推荐

  1. wx小程序横向滚动

    .subOper>scroll-view{ margin-bottom: 22rpx; width: 100%; white-space: nowrap; } /* subClass 是scro ...

  2. 【Python】Excel操作-2 (07版本以下Excel操作,其实不怎么用了,麻蛋,预习了2天课间才发现,还说怎么跟老师讲的不一样)

    #保存修改Excel import xlrd from xlutils.copy import copy #打开Excel文档并将内容读取到内存 readbook=xlrd.open_workbook ...

  3. http头之keep-alive

    1.什么是keep-alive模式? 我们知道HTTP协议采用“请求-应答”模式,当使用普通模式,即非KeepAlive模式时,每个请求/应答客户和服务器都要新建一个连接,完成 之后立即断开连接(HT ...

  4. 新建oracle数据库表空间及删除表空间和用户

    进入oracle的命令控制台,按具体情况执行以下命令: sqlplus 默认数据库普通用户登录sqlplus / as sysdba 默认数据库管理员登录sqlplus username/passwo ...

  5. Ubuntu16.04安装&创建虚拟环境

    一.linux环境 Ubuntu16.04 二.安装和配置虚拟环境 安装虚拟环境 sudo pip install virtualenv sudo pip install virtualenvwrap ...

  6. file类和io流

    一.file类 file类是一个可以用其对象表示目录或文件的一个Java.io包中的类 import java.io.File; import java.io.IOException; public ...

  7. 2.14 加载Firefox配置

    2.14 加载Firefox配置(略,已在2.1.8讲过,请查阅2.1.8节课) 回到顶部 2.14-1 加载Chrome配置 一.加载Chrome配置chrome加载配置方法,只需改下面一个地方,u ...

  8. MSDN Windows各版本哈希值

    Windows 7 Enterprise (x64) - DVD (English)文件名 en_windows_7_enterprise_x64_dvd_x15-70749.isoSHA1: A89 ...

  9. 20165228 2017-2018-2 《Java程序设计》第3周学习总结

    20165228 2017-2018-2 <Java程序设计>第3周学习总结 教材学习内容总结 编程语言 面向机器语言:机器能直接识别的语言, 其指令由特定的二进制码表示. 其中汇编语言是 ...

  10. JavaBasic_09

    方法的参数传递 方法调用时参数值的传递可以分为"值传递"和"引用传递"两种 值传递 - a.当方法的参数为基本数据类型时 b.实参的值被复制给形参,改变形参不会 ...