重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
用插入排序做了一下
创新互联公司主营巍山网站建设的网络公司,主营网站建设方案,成都App定制开发,巍山h5微信小程序定制开发搭建,巍山网站营销推广欢迎巍山等地区企业咨询
#include stdlib.h
typedef struct data
{
int value;
struct data *next;
}data;
int sort_link(data **op_list)
{
data *p1 = NULL; // 当前待排序的节点
data *p2 = NULL; // 待排序链表表头
data *q = NULL; // 有序链表表头
data *t1 = NULL; // 插入节点的前一个节点
data *t2 = NULL; // 插入节点的后一个节点
// 入参检查
if (NULL == op_list || NULL == *op_list)
{
return -1;
}
p1 = *op_list;
while (NULL != p1)
{
p2 = p1-next; // 记录待排序链表下一个节点的位置
p1-next = NULL; // 把当前节点从链表中分离出来
t2 = q;
while (NULL != t2)
{
if (t2-value = p1-value)
{
t1 = t2;
t2 = t2-next;
}
else if (t2 == q)
{
// 插到有序链表的首部
p1-next = q;
q = p1;
break;
}
else
{
// 将当前节点插到t1和t2之间
t1-next = p1;
p1-next = t2;
break;
}
}
if (NULL == t2)
{
if (NULL == t1)
{
// 插入的是第一个节点
q = p1;
}
else
{
// 插到有序链表的末尾
t1-next = p1;
}
}
p1 = p2;
}
*op_list = q;
return 0;
}
// 测试函数入口
int main()
{
data *list = NULL;
data *p = NULL;
int num = 4;
for (; num 0; --num)
{
p = (data*)malloc(sizeof(data));
p-value = num;
p-next = list;
list = p;
}
sort_link(list);
return 0;
}
void fun(char a[])
{ int k=0,i,j;
char t;
while(a[k])
k++;//计算字符串长度
for(i=0;ik;i++)//冒泡排序
for(j=0;jk-1-i;j++)
if(a[j]a[j+1])
{t=a[j];
a[j]=a[j+1];
a[j+1]=t;}
}
给你一个直接插入排序
#include "stdio.h"
void InsertSort(int a[], int left, int right) {//对数组a从下标为left到right区域进行直接插入排序
int i, j, tmp;
for(i = left + 1; i = right; i++) {
for(j = i - 1, tmp = a[i]; j = left tmp a[j]; j++)
a[j + 1] = a[j];
a[j + 1] = tmp;
}
}
void main( ) {
int i, n, a[100];
scanf("%d", n);
for(i = 0; i n; i++)
scanf("%d", a[i]);
InsertSort(a, 0, n - 1);
printf("\n");
for(i = 0; i n; i++) printf("%d\t", a[i]);
}
我做了一些修改,下面的程序可以运行!你肯定是个初学者,所以不要急慢慢来,把基础的东西一定要搞懂.
我所做的修改主要有3点:
1、自定义函数不能在函数名后加分号(除非在函数说明时)
2、自定义函数如要放在主函数之后,则在主函数中一定要说明int
opp(int
x);
否则一定要放在主函数之前定义
3、printf()是格式化的输出函数,一定要给出输出格式,你的程序中是int型的所以用“%d”
最后建议你找一本c语言的书好好看看!
#include
int
opp(x)
{
int
r;
r=x+1;
return
(r);
}
main()
{
int
a=1,b;
b=opp(a);
printf("%d",b);
}
老师教的东西没学会呀,要用指针
void atoz(int *a,int *b,int *c) //将输入的数据按由小到大排列
再试一下或者
void atoz(int a,int b,int c) //将输入的数据按由小到大排列
知道数组为什么能行吗?应为数组x[]其实就是一个指针或者理解为地址
用了一个冒泡法,从小到大排序,请参考
#include stdio.h
void Sort(int token[], int count); /*在此处做函数声明最好*/
void main()
{
int i,count,token[100];
printf("请输入要排序数字的个数:\n");
scanf("%d",count); /*从键盘输入要处理的信息*/
printf("请输入要排序的数字:\n");
for(i=0;icount;i++)
scanf("%d",token[i]);
Sort(token,count); /*调用排序函数*/
}
void Sort(int token[], int count)
{
int i,j,t,s=0; /*定义t做中间变量*/
for(i=0;icount-1;i++) /*冒泡法排序*/
{
for(j=i+1;jcount;j++)
if(token[i]token[j])
{
t=token[j];
token[j]=token[i];
token[i]=t;
}
}
printf("排序后的数字为:\n");
for(i=0;icount;i++)
{
printf("%6d ",token[i]); /*五个一行显示,比较清晰*/
s++;
if(s%5==0)
printf("\n");
}
printf("\n");
}