数据结构--内排序

直接插入排序

#include <STDIO.H>
typedef int Keytype;
typedef struct
{
Keytype key;
int data;

}RecType;
void InsertSort(RecType R[],int n)
{

int i;
int j;
RecType temp;
for(i=1;i<n;i++)
{

temp=R[i];

j=i-1;
while (j>=0&&temp.key<R[j].key)
{
R[j+1]=R[j];
j--;

}
R[j+1]=temp;
}
}

二分插入排序:

void InsertSort1(RecType R[],int n)
{

int i,j,low,high,mid;
RecType temp;
for(i=1;i<n;i++)
{

temp=R[i];
low=0;
high=i-1;
while (low<=high)
{
mid=(high+low)/2;
if (temp.key<R[mid].key)
high=mid-1;
else
low=mid+1;
}
for (j=i-1;j>=high+1;j--)
R[j+1]=R[j];
R[high+1]=temp;

}

}

希尔排序:

void shellsort(Sqlist R[],int n)
{
int i,j,gap;
Sqlist temp;
gap=n/2;
while (gap>0)
{
for (i=gap;i<n;i++)
{
temp=R[i];
j=i-gap;
while (j>=0&&temp.data<R[j].data)
{
R[j+gap]=R[j];
j=j-gap;
}
R[j+gap]=temp;

}
gap=gap/2;
}
}

冒泡排序:

void Bubblesort(RecType R[],int n)
{

int i,j,exchang;
RecType temp;
for (i=0;i<n-1;i++)
{
exchang=0;
for (j=n-1;j>i;j--)

if (R[j].key<R[j-1].key)
{
temp=R[j].key;
R[j].key=R[j-1].key;
R[j-1].key=temp;
exchang=1;

}
if(exchang==0)
return ;

}
}

数据结构--内排序,布布扣,bubuko.com

时间: 2024-10-15 13:19:06

数据结构--内排序的相关文章

数据结构_内排序总结

文件从逻辑上可分为排序顺序文件.一般(即非排序)顺序文件:从物理储上可分为连续文件.链接文件.(参考 文件及查找-MarchOn) 定义:将文件的记录按记录关键字值递增或递减顺序重新组织,得到有序的文件记录.通常指的是连续顺序文件的排序,当然链接顺序文件也可:当记录只包含关键字时即为元素的排序. 分类: 分类法1:内排序.外排序(外排序用于数据量大而无法一次全装入内存的数据文件的排序,通常用归并法). 分类法2:连续顺序文件排序.链接顺序文件排序 分类法3:稳定排序.不稳定排序:关键字值一样的文

数据结构精要------直接插入排序和希尔排序算法

上篇总结中主要实践了算法的内排序的选择排序,那么接下来我们继续实践插入排序排序的两种:直接插入排序和希尔排序算法. -----直接插入排序 package com.sort; /** * 直接插入排序 * * @author weixing-yang * * 算法思路: * 每步将一个待排序的元素,插入到前面已排序好的一组元素中的适当位置, * 直到所有元素全部出入完成为止. */ public class InsertionSort { public void insertionSort(in

数据结构精要------直接选择和堆排序算法

上篇总结中主要实践了算法的内排序的交换排序,那么接下来我们继续实践选择排序的两种:直接选择和堆排序算法. -----直接选择排序 package com.sort; /** * 直接选择排序算法 * @author weixing-yang * * 算法思路: * 首先找出最大元素,将其与a[n-1]位置置换. * 然后在余下的n-1个元素中寻找最大元素,将其与a[n-2]位置置换. * 如此进行下去,知道n个元素排序完成. */ public class SelectSort { public

数据结构精要------冒泡与直接排序算法

作为程序员的我们在程序开发的时候经常会用到一些简单的排序算法,例如:对数组进行快速排序:要实现这些就需要运用到数据结构排序算法的知识,那么熟练使用和掌握排序算法对于开发人员来说是百利而无一害.同时记录一下知识点也是自己对自己的进一步巩固总结: 那么何为排序算法呢? 排序是计算机内经常进行的一种操作,其目是一组 "无序 "的记录序列调整为 "有序 "的记 录序列.排序分内排序和外排序. 那么何为内排和外排呢? 内排序 :指在排序 期间数据对象全部存放在内存排序. 外排

内排序—数组实现(c++)

1 参考资料:数据结构与算法分析(第三版)(c++) 2 http://blog.csdn.net/theprinceofelf/article/details/6672677 3 4 5 6 7 内排序,均采用数组实现,数组有较多的局限性,这些实现是为了去了解排序算法 8 的操作流程 9 10 #include<iostream> 11 using namespace std; 12 13 void Swap(int &a,int &b); 14 void Print(int

数据结构学什么?

0X00数据结构 1.定义 数据结构是一门讨论“描述现实世界实体的数据模型(通常为非数值计算)及其之上的运算在计算机中如何表示和实现”的学科. 2.几个概念 数据:描述客观事物的数和字符的集合: 数据元素:即一条记录,是数据的基本单位: 数据项:即字段或域,具有独立含义的最小数据单位: 数据对象:性质相同的数据元素的集合,数据的子集: 数据结构:所有数据元素以及数据元素之间的关系. 我的理解: 3.研究范围 数据的逻辑结构:数据元素间的逻辑关系 集合 线性结构 树形结构 图形结构 数据的存储结构

《大话数据结构》学习笔记 排序

排序的严格定义:  假设含有n个记录的序列为{r1,r2,......,rn},对应的关键字分别为{k1,k2......,kn},需确定1,2,......,n的一种排列p1,p2,......,pn,使其相应的关键字 满足Kp1<=Kp2<=......Kpn关系,即使得序列成为一个按关键字有序的序列(rpq,rp2,......rpn),此操作称为排序.  排序的稳定性:内排序与外排序(根据记录是否全部放置在内存中). 根据排序中的主要操作,可以分为插入排序类(直接插入排序->希尔

复习数据结构:排序算法(一)——插入排序

从这一篇开始,计划复习一下数据结构的基本知识.一来是为了开年之后的找工作,二来是为了想提升自己的编程能力.由于这些数据结构知识点,之前都学习过,这里我们就提炼出每个知识点的核心,以及代码实现. 这篇先说排序算法中的插入排序. 插入排序是一种稳定排序算法,属于内排序.适合少量数据量的排序. 当输入数组已经排好序时,插入排序需要O(n),快排需要O(n^2). 当输入数组倒序排列时,插入排序时复为:O(n^2). 平均时间复杂度:O(n^2). 代码实现如下: #include<iostream>

复习数据结构:排序(一)——插入排序

从这一篇开始,我开始复习数据结构的知识点,博文主要偏重于每个知识点的核心思想,以及代码实现.这一篇先从排序算法中的插入排序开始. 稳定排序.内排序.适合少量数据量的排序. 当输入数组已经排好序时,插入排序需要O(n),快排需要O(n^2). 当输入数组倒序排列时,插入排序时复为:O(n^2). 平均时间复杂度:O(n^2). 插入排序的基本做法是:将一个数插入到一个已经排列好的数组中,通过移动这个数的位置,使得插入之后的数组也是有序的,不断重复这个过程,使得最终所有的数都是有序的. 实现代码如下