求表插入排序的C语言代码,数据结构的,能在VC里运行的。

求表插入排序的C语言代码,数据结构的,能在VC里运行的。,第1张

三种插入排序都给你写好啦!

#include<string.h>

#include<ctype.h>

#include<malloc.h>/* malloc()等 */

#include<limits.h>/* INT_MAX等 */

#include<stdio.h>/* EOF(=^Z或F6),NULL */

#include<stdlib.h>/* atoi() */

#include<io.h>/* eof() */

#include<math.h>/* floor(),ceil(),abs() */

#include<process.h>/* exit() */

/* 函数结果状态代码 */

#define TRUE 1

#define FALSE 0

#define OK 1

#define ERROR 0

#define INFEASIBLE -1

/* #define OVERFLOW -2 因为在math.h中已定义OVERFLOW的值为3,故去掉此行 */

typedef int Status/* Status是函数的类型,其值是函数结果状态代码,如OK等 */

typedef int Boolean/* Boolean是布尔类型,其值是TRUE或FALSE */

#define MAXSIZE 20 /* 一个用作示例的小顺序表的最大长度 */

/*对两个数值型关键字的比较约定为如下的宏定义 */

#define EQ(a,b) ((a)==(b))

#define LT(a,b) ((a)<(b))

#define LQ(a,b) ((a)<=(b))

typedef int KeyType/* 定义关键字类型为整型 */

typedef int InfoType/* 定义其它数据项的类型 */

typedef struct

{

KeyType key/* 关键字项 */

InfoType otherinfo/* 其它数据项,具体类型在主程中定义 */

}RedType/* 记录类型 */

typedef struct

{

RedType r[MAXSIZE+1]/* r[0]闲置或用作哨兵单元 */

int length/* 顺序表长度 */

}SqList/* 顺序表类型 */

void InsertSort(SqList *L)

{ /* 对顺序表L作直接插入排序。*/

int i,j

for(i=2i<=(*L).length++i)

if LT((*L).r[i].key,(*L).r[i-1].key) /* "<",需将L.r[i]插入有序子表 */

{

(*L).r[0]=(*L).r[i]/* 复制为哨兵 */

for(j=i-1LT((*L).r[0].key,(*L).r[j].key)--j)

(*L).r[j+1]=(*L).r[j]/* 记录后移 */

(*L).r[j+1]=(*L).r[0]/* 插入到正确位置 */

}

}

void BInsertSort(SqList *L)

{ /* 对顺序表L作折半插入排序。*/

int i,j,m,low,high

for(i=2i<=(*L).length++i)

{

(*L).r[0]=(*L).r[i]/* 将L.r[i]暂存到L.r[0] */

low=1

high=i-1

while(low<=high)

{ /* 在r[low..high]中折半查找有序插入的位置 */

m=(low+high)/2/* 折半 */

if LT((*L).r[0].key,(*L).r[m].key)

high=m-1/* 插入点在低半区 */

else

low=m+1/* 插入点在高半区 */

}

for(j=i-1j>=high+1--j)

(*L).r[j+1]=(*L).r[j]/* 记录后移 */

(*L).r[high+1]=(*L).r[0]/* 插入 */

}

}

void P2_InsertSort(SqList *L)

{ /* 2_路插入排序 */

int i,j,first,final

RedType *d

d=(RedType*)malloc((*L).length*sizeof(RedType))/* 生成L.length个记录的临时空间 */

d[0]=(*L).r[1]/* 设L的第1个记录为d中排好序的记录(在位置[0]) */

first=final=0/* first、final分别指示d中排好序的记录的第1个和最后1个记录的位置 */

for(i=2i<=(*L).length++i)

{ /* 依次将L的第2个~最后1个记录插入d中 */

if((*L).r[i].key<d[first].key)

{ /* 待插记录小于d中最小值,插到d[first]之前(不需移动d数组的元素) */

first=(first-1+(*L).length)%(*L).length/* 设d为循环向量 */

d[first]=(*L).r[i]

}

else if((*L).r[i].key>d[final].key)

{ /* 待插记录大于d中最大值,插到d[final]之后(不需移动d数组的元素) */

final=final+1

d[final]=(*L).r[i]

}

else

{ /* 待插记录大于d中最小值,小于d中最大值,插到d的中间(需要移动d数组的元素) */

j=final++/* 移动d的尾部元素以便按序插入记录 */

while((*L).r[i].key<d[j].key)

{

d[(j+1)%(*L).length]=d[j]

j=(j-1+(*L).length)%(*L).length

}

d[j+1]=(*L).r[i]

}

}

for(i=1i<=(*L).lengthi++) /* 把d赋给L.r */

(*L).r[i]=d[(i+first-1)%(*L).length]/* 线性关系 */

}

void print(SqList L)

{

int i

for(i=1i<=L.lengthi++)

printf("(%d,%d)",L.r[i].key,L.r[i].otherinfo)

printf("\n")

}

#define N 8

void main()

{

RedType d[N]={{49,1},{38,2},{65,3},{97,4},{76,5},{13,6},{27,7},{49,8}}

SqList l1,l2,l3

int i

for(i=0i<Ni++) /* 给l1.r赋值 */

l1.r[i+1]=d[i]

l1.length=N

l2=l3=l1/* 复制顺序表l2、l3与l1相同 */

printf("排序前:\n")

print(l1)

InsertSort(&l1)

printf("直接插入排序后:\n")

print(l1)

BInsertSort(&l2)

printf("折半插入排序后:\n")

print(l2)

P2_InsertSort(&l3)

printf("2_路插入排序后:\n")

print(l3)

}

这样的表最好不要在触发器中创建,如果你的业务模式比较固定,a_number_b,

a_number_C,a_number_D三个表都应该是创建好了,直接在触发器中更新数据。

如果仅仅这三个表是临时表,就写语句创建,用完之后删掉.

看你的逻辑比较乱,A的触发器,是如何从B中取值的,取值的根据是什么,就是select * into 新表名 from B,如何跟A对应的?

#include <stdio.h>

#include <string.h>

#include <malloc.h>

struct my_list

{

struct my_list * next

int num

}

// 创建表

struct my_list * create_list()

{

struct my_list * list = (struct my_list*)malloc(sizeof(struct my_list))

list->next = 0

return list

}

// 在尾部插入

void push_list(struct my_list * head, int num)

{

while(head->next != 0) head = head->next

head->next = create_list()

head->next->num = num

}

// 读取第n个元素

int get_list(struct my_list * head, int where)

{

for(int i = 0i <where++i)

head = head->next

return head->next->num

}

// 删除表

void destroy_list(struct my_list * list)

{

if(list->next) destroy_list(list->next)

free(list)

}

// 移除第where个元素

void remove_list(struct my_list * head, int where)

{

for(int i = 0i <where++i)

{

head = head->next

}

struct my_list * dest = head->next

head->next = head->next->next

dest->next = 0

destroy_list(dest)

}

int main()

{

struct my_list * li = create_list()

// 插入12,13,14

push_list(li, 12)

push_list(li, 13)

push_list(li, 14)

printf("before remove 0 :%d %d\n", get_list(li, 0), get_list(li, 1))

// 移除0位置元素

remove_list(li, 0)

printf("after remove 0: %d %d\n", get_list(li, 0), get_list(li, 1))

destroy_list(li)

return 0

}

++qq群:193406976


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11538476.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存