|

楼主 |
发表于 2017-12-20 21:44:34
|
显示全部楼层
#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[i] = rand()%100;
printf("%4d",a[i]);
}
printf("\n");
}
/*void insertSort(int *b, int n)
{
int i, j;
for(i = 1; i <= n; i ++ )
{
b[0] = b[i];
for(j = j -1; b[0] < b[j]; j --)
b[j + 1] = b[j];
b[j+1] = b[0];
}
}*/
//直接插入排序
/*
void insertSort(int *b, int n)
{
int i, j, k;
for (i = 1; i < n; i++)
{
//为a[i]在前面的a[0...i-1]有序区间中找一个合适的位置
for (j = i - 1; j >= 0; j--)
if (b[j] < b[i])
break;
//如找到了一个合适的位置
if (j != i - 1)
{
//将比a[i]大的数据向后移
int temp = b[i];
for (k = i - 1; k > j; k--)
b[k + 1] = b[k];
//将a[i]放到正确位置上
b[k + 1] = 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[0] = b[i];
for(j = i - d; j > 0 && b[0] < b[j]; j = j - d)
b[j + d] = b[j];
b[j + d] = b[0];
}
}
}
//顺序查找
int SeqSearch1(int *b, int n, int k)
{
int i;
b[0] = k;
i = n ;
while(b[i] != k)
{
i--;
}
return i;
}
int main()
{
int a[100];
int b[100];
int n , i, k,h;
scanf("%d", &n);
create(a, n);
for(i = 1; i < n + 1; i++)
{
b[i] = a [i];
}
// insertSort(b, n);
ShellSort(b, n);
for(i = 1; i < n+1 ; i ++)
{
printf("%4d", b[i]);
}
printf("输入一个你需要查找的成绩:");
scanf("%d", &k);
SeqSearch1(b, n, k);
printf("它处于第%d位.", i);
return 0;
}这个是改后的代码,n和长度是相等的 |
|