求大佬帮忙,我实在是不知道哪里错了
写了生成随机数,再用直接插入排序和希尔排序,在查找。但是我第一个插入排序实在不知道哪里不对,无法排序。还有查找元素位置也是不对,返回的i,一直是数组长度。#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void create(int *a,int n)
{ int i;
srand((unsigned)time(NULL));
for(i = 1; i < n; i ++)
{
a = rand()%100;
printf("%4d",a);
}
printf("\n");
}
/*void insertSort(int *b, int n)
{
int i, j;
for(i = 1; i <= n; i ++ )
{
b = b;
for(j = j -1; b < b; j --)
b = b;
b = b;
}
}*/
//直接插入排序
/*
void insertSort(int *b, int n)
{
int i, j, k;
for (i = 1; i < n; i++)
{
//为a在前面的a有序区间中找一个合适的位置
for (j = i - 1; j >= 0; j--)
if (b < b)
break;
//如找到了一个合适的位置
if (j != i - 1)
{
//将比a大的数据向后移
int temp = b;
for (k = i - 1; k > j; k--)
b = b;
//将a放到正确位置上
b = temp;
}
}
}*/
//希尔排序
void ShellSort(int *b, int n)
{
int i , j;
int d;
for(d = n - 1/ 2; d >= 1; d = d / 2)
{
for(i = d + 1; i <= n - 1; i ++)
{
b = b;
for(j = i - d; j > 0 && b < b; j = j - d)
b = b;
b = b;
}
}
}
//顺序查找
int SeqSearch1(int *b, int n, int k)
{
int i;
b = k;
i = n ;
while(b != k)
{
i--;
}
return i;
}
int main()
{
int a;
int b;
int n , i, k,h;
scanf("%d", &n);
create(a, n);
for(i = 1; i < n; i++)
{
b = a ;
}
// insertSort(b, n);
ShellSort(b, n);
for(i = 1; i < n ; i ++)
{
printf("%4d", b);
}
printf("输入一个你需要查找的成绩:");
scanf("%d", &k);
SeqSearch1(b, n, k);
printf("它处于第%d位.", i);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void create(int *a,int n)
{ int i;
srand((unsigned)time(NULL));
for(i = 1; i < n + 1; i ++)
{
a = rand()%100;
printf("%4d",a);
}
printf("\n");
}
/*void insertSort(int *b, int n)
{
int i, j;
for(i = 1; i <= n; i ++ )
{
b = b;
for(j = j -1; b < b; j --)
b = b;
b = b;
}
}*/
//直接插入排序
/*
void insertSort(int *b, int n)
{
int i, j, k;
for (i = 1; i < n; i++)
{
//为a在前面的a有序区间中找一个合适的位置
for (j = i - 1; j >= 0; j--)
if (b < b)
break;
//如找到了一个合适的位置
if (j != i - 1)
{
//将比a大的数据向后移
int temp = b;
for (k = i - 1; k > j; k--)
b = b;
//将a放到正确位置上
b = temp;
}
}
}*/
//希尔排序
void ShellSort(int *b, int n)
{
int i , j;
int d;
for(d = n / 2; d >= 1; d = d / 2)
{
for(i = d + 1; i <= n - 1; i ++)
{
b = b;
for(j = i - d; j > 0 && b < b; j = j - d)
b = b;
b = b;
}
}
}
//顺序查找
int SeqSearch1(int *b, int n, int k)
{
int i;
b = k;
i = n;
while(b != k)
{
i--;
}
return i;
}
int main()
{
int a;
int b;
int n , i, k,h;
scanf("%d", &n);
create(a, n);
for(i = 1; i < n + 1; i++)
{
b = a ;
}
// insertSort(b, n);
ShellSort(b, n);
for(i = 1; i < n+1 ; i ++)
{
printf("%4d", b);
}
printf("输入一个你需要查找的成绩:");
scanf("%d", &k);
SeqSearch1(b, n, k);
printf("它处于第%d位.", i);
return 0;
}这个是改后的代码,n和长度是相等的 #include <stdio.h>
#include <stdlib.h>
#include <time.h>
void create(int *a,int n)
{ int i;
srand((unsigned)time(NULL));
for(i = 1; i < n + 1; i ++)
{
a = rand()%100;
printf("%4d",a);
}
printf("\n");
}
/*void insertSort(int *b, int n)
{
int i, j;
for(i = 1; i <= n; i ++ )
{
b = b;
for(j = j -1; b < b; j --)
b = b;
b = b;
}
}*/
//直接插入排序
/*
void insertSort(int *b, int n)
{
int i, j, k;
for (i = 1; i < n; i++)
{
//为a在前面的a有序区间中找一个合适的位置
for (j = i - 1; j >= 0; j--)
if (b < b)
break;
//如找到了一个合适的位置
if (j != i - 1)
{
//将比a大的数据向后移
int temp = b;
for (k = i - 1; k > j; k--)
b = b;
//将a放到正确位置上
b = temp;
}
}
}*/
//希尔排序
void ShellSort(int *b, int n)
{
int i , j;
int d;
for(d = n / 2; d >= 1; d = d / 2)
{
for(i = d + 1; i <= n - 1; i ++)
{
b = b;
for(j = i - d; j > 0 && b < b; j = j - d)
b = b;
b = b;
}
}
}
//顺序查找
int SeqSearch1(int *b, int n, int k)
{
int i;
b = k;
i = n;
while(b != k)
{
i--;
}
return i;
}
int main()
{
int a;
int b;
int n , i, k,h;
scanf("%d", &n);
create(a, n);
for(i = 1; i < n + 1; i++)
{
b = a ;
}
// insertSort(b, n);
ShellSort(b, n);
for(i = 1; i < n+1 ; i ++)
{
printf("%4d", b);
}
printf("输入一个你需要查找的成绩:");
scanf("%d", &k);
SeqSearch1(b, n, k);
printf("它处于第%d位.", i);
return 0;
}这个是改后的代码,n和长度是相等的
@FishC 鱼C篮球 发表于 2024-01-02 18:57
#include
#include
#include
void create(int * ...
你好!我发现你的代码中存在一些错误。
首先,在create函数中,你使用了srand((unsigned)time(NULL))来设置随机数种子,但是你没有包含头文件<ctime>,导致编译出错。你可以在代码开头添加#include <ctime>来解决这个问题。
其次,在insertSort函数中,你定义了变量k,但是没有给它赋初值。你可以在函数开始前添加int k;来修复这个问题。
另外,insertSort函数的实现也有问题。你对i的赋值有误,应该是i = j + d,而不是i = d + 1,然后在for循环内添加 i -= d,来实现从右向左的查找插入位置。同时,你把找到插入位置之后的操作放在if语句的外面,应该将这部分代码放在if语句内部。你可以参考下面的示例代码进行修改:
void insertSort(int *b, int n)
{
int i, j, k;
for(i = 2; i <= n; i++)
{
if (b < b)
{
b = b;
for (j = i - 1; b < b; j -= 1)
b = b;
b = b;
}
}
}
最后,在SeqSearch1函数中,你在while循环里忘记给i减一,导致后面输出的i值不正确。你可以将while循环改为while(i > 0 && b != k),并在循环内部添加i--,来修复这个问题。
除此之外,你的代码基本上是可以运行的。希望这些修改能够帮助到你!如果还有其他问题,请随时提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]