C语言:产生100个随机数,并利用插入排序法按非递减顺序进 行排序

供稿:hz-xin.com     日期:2025-01-13
用C语言产生一组随机数,并用这组数来比较各种排序方法的效率(答得好给100+的分)

终于写完了...累死了,不过我得说一句,你这个分太少,一般不会有人像我这么无聊的..呵呵

#include
#include
#include
#define Recordtype int
void copy(Recordtype s[], Recordtype d[], int n);
/************************************************************************/
/* 直接插入法 */
/************************************************************************/
int cmpTforIs = 0;//记录插入法的比较次数
int ChgTforIs = 0;//记录插入法的交换次数
void InsertSort(Recordtype data[], int n);

/************************************************************************/
/* 折半插入法 */
/************************************************************************/
int cmpTforBinarys = 0;//记录冒泡的比较次数
int ChgTforBinarys = 0;//记录冒泡的交换次数
void BinarySearchInsertion(int numbers[], const int n);
/************************************************************************/
/* 冒泡法 */
/************************************************************************/
int cmpTforBs = 0;//记录冒泡的比较次数
int ChgTforBs = 0;//记录冒泡的交换次数
void Bubsort(Recordtype *start, Recordtype *end);
/************************************************************************/
/* 快排 */
/************************************************************************/
int cmpTforQs = 0;//记录快排的比较次数
int ChgTforQs = 0;//记录快排的交换次数
int quickPass(int start, int last, Recordtype record[]);
int quickSort(int start, int last, Recordtype record[]);
int main()
{
Recordtype Data[100];
Recordtype D[100];
srand(time(NULL));
printf("the rand 100 numbers are:
");
for (int i=0; i<100; i++)
{
D[i] = rand()%1000;//便于观察,每次产生1000内的整数
printf("%d ", D[i]);
}
printf("


");


copy(D, Data, 100);
BinarySearchInsertion(Data, 100);
printf("折半插入法的比较次数为%d,交换次数为%d
", cmpTforBinarys, ChgTforBinarys);

copy(D, Data, 100);
InsertSort(Data, 100);
printf("直接插入法的比较次数为%d,交换次数为%d
", cmpTforIs, ChgTforIs);


copy(D, Data, 100);
Bubsort(&Data[0], &Data[99]);
printf("冒泡法的比较次数为%d,交换次数为%d
", cmpTforBs, ChgTforBs);

copy(D, Data, 100);
quickSort(0, 99, Data);
printf("快排的比较次数为%d,交换次数为%d
", cmpTforQs, ChgTforQs);


printf("排序后的序列为
");//你可以这块放在任意排序完毕的语句后面,检查排序的正确性
for (i=0; i<100; i++)
{
printf("%d ", Data[i]);
}
return 0;
}
void copy(Recordtype s[], Recordtype d[], int n)
{
for (int i = 0; i<n; i++)
{
d[i] = s[i];
}
}

void BinarySearchInsertion(int numbers[], const int n)
{
int middle=0;
for(int i = 1; i < n; i++)
{
int low = 0 ;
int high = i-1 ;
int temp = numbers[i] ;
while(low <= high)
{
cmpTforBinarys++;
middle = (low + high) / 2 ;
if(temp < numbers[middle])
{
high = middle - 1 ;
}
else
low = middle + 1 ;
}
for(int k = i ; k >middle; k--) //K>middle不能错
{
ChgTforBinarys++;
numbers[k] = numbers[k-1 ] ;
}
ChgTforBinarys++;
numbers[low] = temp ; //此处用 numbers[high+1] = temp ;也可
} //赋值语句不能弄错numbers[low]=
}




void InsertSort(Recordtype data[], int n)
{
for (int i = 1; i< n; i++)
{
int temp = data[i];
for(int j = i; j>0 && temp<data[j-1]; --j)
{
ChgTforIs++;
cmpTforIs++;
data[j] = data[j-1];
}
data[j] =temp;
}
}










void Bubsort(Recordtype *start, Recordtype *end)
{
int num = end - start + 1;
Recordtype temp;
int i, j;
Recordtype *a = start;
for (i = 0; i<num; i++)
{
for (j = 0; j<num-i; j++)
{
cmpTforBs++;
if (*(a+j-1) > *(a+j))
{
ChgTforBs++;
temp = *(a+j-1);
*(a+j-1) = *(a+j);
*(a+j) = temp;
}
}
}
}











int quickPass(int start, int last, Recordtype record[])
{
int s = start, l = last;
int temp = record[s];
while (s < l)
{
while (s<l && temp <= record[l] )
{
l--;
cmpTforQs++;
}

if (s<l)
{
record[s++] = record[l];
ChgTforQs++;
}


while (s= record[s])
{
s++;
cmpTforQs++;
}
if (s<l)
{
record[l--] = record[s];
ChgTforQs++;
}
}
record[s] = temp;
ChgTforQs++;
return s;
}
int quickSort(int start, int last, Recordtype record[])
{
int pos = 0;
if (start < last)
{
pos = quickPass(start, last, record);
quickSort(start, pos-1, record);
quickSort(pos+1, last, record);
}
return 0;
}

#include
#include
#include
#define MAXLENGTH 10 //这里请自己改成100就可以了,我测试只用10!void Fill(int numbers[])
{
srand((unsigned)time(NULL)); for(int i=0;i<MAXLENGTH;++i)
{
numbers[i]=rand()%900+100;
printf("%d ",numbers[i]);
}
printf("
");
}void Sort1(int numbers[])
{
//选择排序(从大到小)
for(int i=0;i<MAXLENGTH-1;++i)
{
for(int j=i+1;j<MAXLENGTH;++j)
{
if(numbers[i]<numbers[j])
{
numbers[i]^=numbers[j];
numbers[j]^=numbers[i];
numbers[i]^=numbers[j];
}
}
}
for(int l=0;l<MAXLENGTH;++l)
{
printf("%d ",numbers[l]);
}
printf("
");
}void Sort2(int numbers[])
{
//插入排序(从小到大)
int tempnumbers[MAXLENGTH+1]; for(int i=0;i<MAXLENGTH;++i)
{
if(i==0)
{
tempnumbers[0]=numbers[0];
}
else
{
int index = 0;
//寻找比插入数字大的那个最小数字(寻找插入点)
for(int j=0;j<MAXLENGTH;++j)
{
if(tempnumbers[j]>numbers[i])
{
index = j;
break;
}
} //后移动数据
for(int k=i;k>=index;--k)
{
tempnumbers[k+1]=tempnumbers[k];
} //插入
tempnumbers[index]=numbers[i];
}
} for(int l=0;l<MAXLENGTH;++l)
{
numbers[l]=tempnumbers[l];
printf("%d ",numbers[l]);
}
printf("
");}
int main()
{
int numbers[MAXLENGTH];
Fill(numbers);
Sort1(numbers);
Sort2(numbers); system("pause");
}

#include<stdio.h>
#include<stdlib.h>
void displayData(int a[100])
{
int i;
for(i=0;i<100;i++)
{
if(i%5==0){
printf("\n");
}
printf("%4d",a[i]);
}
}
//判断数组中元素是否重复,重复返回1,否则返回0
int chongfu(int r[],int n,int data)
{
int i;
for(i=0;i<n;i++)
{
if(r[i]==data)
{
return 1;
}
}
return 0;
}
//生成随机数的数组
void createRandomArray(int RAN[100])
{
int i,flag=0,random;
for(i=0;i<100;i++)
{
while(1)
{
random=rand();
if(random<1000&&chongfu(RAN,i-1,random)==0)
{
RAN[i]=random;
break;
}
}
}
displayData(RAN);
}
//插入排序
void insertsort(int r[],int i,int x)
{ //i为数组r中已有序的元素的个数
while(i!=0 ){ r[i]=r[i-1]; i--; }
r[i]=x; }
void main()
{
int RAN[100];
createRandomArray(RAN);
printf("\nok,随机数生成,开始执行排序操作 :\n");
printf("\n执行插入排序后:\n");
bubbleSort(RAN);
printf("\n执行选择后:\n");
chageSort(RAN);
printf("\n");
displayData(RAN);
getchar();
}

#include "stdio.h"
#include "stdlib.h"
#include "time.h"
int main(void)
{
int a[101],i,j;
randomize();
for(i=1;i<=100;i++)
{
a[i]=random(999)+1;
a[0]=a[i];
j=i-1;
while(a[j]>a[0])
{
a[j+1]=a[j];
j--;
}
a[j+1]=a[0];
}
for(i=1;i<=100;i++)
{
printf("%4d",a[i]);
if(i%5==0)printf("\n");
}
getch();
}

C语言:产生100个随机数,并利用插入排序法按非递减顺序进 行排序_百 ...
void insertsort(int r[],int i,int x){ \/\/i为数组r中已有序的元素的个数 while(i!=0 ){ r[i]=r[i-1]; i--; } r[i]=x; } void main(){ int RAN[100];createRandomArray(RAN);printf("\\nok,随机数生成,开始执行排序操作 :\\n");printf("\\n执行插入排序后:\\n");bubble...

利用matlab(或其他任何方式)生成100个随机数,并编制C语言程序进行从小到...
FILE *fp;\/\/ 生成100个随机数 srand(time(NULL));for (i = 0; i < MAX_SIZE; i++) { arr[i] = rand() % 1000;size++;} \/\/ 将随机数存入文件中 fp = fopen("random_numbers.txt", "w");if (fp == NULL) { printf("Failed to open file.\\n");return 1;} for (i =...

Python写100个随机整数并写入文件?
以下是一个Python程序,可以生成100个随机整数(范围在1到100之间),并将它们写入文件random_numbers.txt中。其中,使用了random模块生成随机数,以及with open() as语句来打开文件和自动关闭文件。python复制代码import random# 生成100个随机整数numbers = [random.randint(1, 100) for i in range(100...

c语言中怎么随机抽选100个数字并排序?
int num[100];int time=0;int numtemp;while (1) \/\/取随机数 { numtemp = rand()%1000;if (numtemp >= 100 && numtemp <=999 ){ num[time] = numtemp;time++;} if (time == 100){ break;} } \/* for(int i=0; i<100; i++) \/\/冒泡排序比较方法 { for (int j=99; ...

随机产生100数,输入一个数在100个数中出现的次数
include <stdio.h> \/\/随机生成100个数,打印出其最大,最小值 include <stdlib.h> \/\/随机函数rand的头文件 void main(){ int a[100],k,max,min;for(k=0;k<100;k++)\/\/利用数组存储随机数 a[k]=rand();printf("产生的随机数如下:\\n");for(k=0;k<100;k++)\/\/打印出产生的随机数...

求解,用C语言编写一个程序,随机生成100个数,并从大到小排序
\/\/#include "stdafx.h"\/\/vc++6.0加上这一行.#include "stdio.h"#include "time.h"#include "stdlib.h"int main(void){ int nDec[100],i,j,k; srand((unsigned)time(NULL)); for(i=0;i<100;nDec[i++]=rand()); for(i=0;i<100;i++){ for(k=i,j=k+1;...

c语言 编写产生100个1到10范围内的随机数的程序,并且以降序排序_百度知 ...
for (int i=0;i<100;i++){ t[i] = (rand()%(10-1+1))+1;\/\/ 然后对t[i]排序算法,冒泡啥的。。baidu去。}

c语言生成1 - 100的不重复随机数
include<stdio.h>#include#include<stdlib.h>int Rand(int X,int Y)\/\/生成随机数{int temp;if(X>Y){temp=X;X=Y;Y=temp;}return rand()%(Y-X+1)+X; }void main(){int arr[100];int i;int r;int temp;srand((unsigned)time(NULL));for(i=0;i<100;i++) arr[i]=i+1;\/\/...

c语言如何实现随机生成多个数组至少要100个
1、首先,打开C语言编译器,新建一个初始.cpp文件,例如:test.cpp。 2、在test.cpp文件中,输入C语言代码: srand((unsigned)time(NULL)); for (int i = 0;i < 100; i++) { printf("%d ", rand()); } 3、编译器运行test.cpp文件,此时成功随机生成了100个随机数。 已赞过 已踩过< 你对这个回答...

C语言 编一个程序,产生0-100随机数,然后用选择排序法,从小到大排列
int main(void){ int nDec[100],i,j,k;srand((unsigned)time(NULL));for(i=0;i<100;nDec[i++]=rand());for(i=0;i<100;i++){ for(k=i,j=k+1;j<100;j++)if(nDec[k]>nDec[j]) k=j;if(i!=k){ j=nDec[i];nDec[i]=nDec[k];nDec[k]=j;} printf("%d ",nDec[...