版权申明:
本实验的实验目的,实验内容,实验要求归东北大学所有,未经许可禁止转载。
实验八 排序
实验目的:
掌握直接插入排序算法;理解其算法原理和适用情况。
实验内容:
1. 构建一个数组,包含N个待排序的数据;
【——【数据结构】|【数据结构实验八】排序】2. 0号单元不用,用于存放监视哨;
3. 通过比较和移动实现数据排序,并输出;
4. 估计算法的时间复杂性。
源码:
#include "stdafx.h"
#include using namespace std;
#define MAXSIZE 100typedef struct{
int r[MAXSIZE + 1];
int length;
}SSTable;
/******初始化表******/
int InitTable(SSTable *L){
L = (SSTable*)malloc(sizeof(SSTable));
if(!L)
exit(OVERFLOW);
L->length = 0;
return OK;
}/******创建表******/
int CreateTable(SSTable *L, int n){
int e, i;
printf("请输入元素:\n");
for(i = 1;
i <= n;
i++){
scanf("%d", &e);
L->r[i] = e;
}
L->length = n;
return OK;
}int LT(int i, int j){
if(i >= j)
return 0;
else
return 1;
}int EQ(int i, int j){
if(i == j)
return 1;
else
return 0;
}/******打印表******/
int PrintTable(SSTable *L){
int i;
for(i = 1;
i <= L->length;
i++){
printf("%3d", L->r[i]);
}
return OK;
}/******查找******/
int Search_Bin(SSTable *L, int key){
int low, high, mid;
low = 1;
high = L->length;
while(low <= high){
mid = (low + high) / 2;
if(EQ(key, L->r[mid]))
return mid;
else if(LT(key, L->r[mid]))
high = mid - 1;
else
low = mid + 1;
}
}
int main()
{
SSTable L;
int n, key, location;
InitTable(&L);
printf("请输入元素个数:\n");
scanf("%d", &n);
CreateTable(&L, n);
printf("表为:\n");
PrintTable(&L);
printf("\n******查找表******\n");
printf("请输入key:\n");
scanf("%d", &key);
location = Search_Bin(&L, key);
printf("\n位置为:%d\n", location);
return 0;
}
运行结果:
文章图片
推荐阅读
- 数据结构|数据结构八大排序,你掌握了哪几大
- c++|C++之string类(·标准库中的string类·string类的模拟实现)
- C++|【c++运算符重载】
- 数据结构|第95篇 C++数据结构(五)树
- C|天天new对象的程序员,居然能找到女朋友(还能教你追女生?)
- c++|NMS 原理和c++实现,已测试通过
- 数据结构 happiness
- [ 数据结构 -- 手撕排序算法第七篇 ] 堆排序(中)堆排序的优化算法
- visual|使用 Visual Studio Code 编写你的第一个 C 程序