分组函数c语言 c语言分组排序代码

C语言利用递归实现插入排序,选择排序,快速排序,归并排序算法 。要求有注释 ! 谢谢各位大神!//InsertionSort
void insertionSort(int a[], int size) {
int i, j, key;
for (i = 0; isize; i) {
key = a[i];
j = i-1;
while (j = 0keya[j]) {//把元素插入到之前的有序元组中
a[j 1] = a[j];
j--;
}
a[j 1] = key;
}
}
//MergeSort
void merge(int a[], int p, int q, int r) { //合并两个子元组
int i, j, k, n1, n2;
int *array1, *array2;
n1 = q - p1,
n2 = r - q;
array1 = (int *)calloc(n1 1, sizeof(int));
array2 = (int *)calloc(n2 1, sizeof(int));
if (array1 == NULL || array2 == NULL) {
printf("Error: calloc failed in concat\n");
exit(EXIT_FAILURE);
}
for(i = 0; in1; i)
array1[i] = a[pi];
for(i = 0; in2; i)
array2[i] = a[q1i];
array1[n1] = MAXNUMBER;
array2[n2] = MAXNUMBER;
i = 0, j = 0;
for(k = p; k = r; k)
if(array1[i] = array2[j])
a[k] = array1[i];
else
a[k] = array2[j];
free(array1);
free(array2);
}
void mergeSort(int a[], int p, int r) {//归并的递归调用
int q;
if (pr) {
q = (p r)/2;
mergeSort(a,p,q);
mergeSort(a,q 1,r);
merge(a,p,q,r);
}
}
//QuickSort
int partition(int a[], int p, int r) {//快排的分组函数
int i, j, x, temp;
x = a[r];
i = p - 1;
for (j = p; jr; j)
if (xa[j]) {
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
temp = a[i];
a[i] = a[r];
a[r] = temp;
return i;
}
void quickSort(int a[], int p, int r) { //快排
int q;
if (pr) {
q = partition(a, p, r);
quickSort(a, p, q-1);
quickSort(a, q 1, r);
}
}
//随即版的quickSort
int randomPartition(int a[], int p, int r){
int i, temp;
i = rand();
while( ip || ir)
i = rand();
temp = a[i];
a[i] = a[r];
a[r] = temp;
return partition(a,p,r);
}
void randomQuickSort(int a[], int p, int r){
int q;
if(pr){
q = randomPartition(a,p,r);
randomQuickSort(a,p,q-1);
randomQuickSort(a,q 1,r);
}
}
//BubbleSort();//冒泡排序
void bubbleSort(int a[], int size) {
int i, j, temp;
for (i = size -1; i = 0; i--)
for (j = 0; ji; j)
if (a[j]a[j 1]) {
temp = a[j];
a[j] = a[j 1];
a[j 1] = temp;
}
}
如何使用c语言对数据随机分组?#include stdio.h
#include stdlib.h
#include time.h
int main()
{
int a[50]; //存放50个球
int i,cnt;
for( i=0;i50;i) //标号
a[i]=i 1 ;
cnt=0;
srand( time(NULL) ) ;
while( cnt25 ) //随机取25个
{
i=rand()P ;
if ( a[i] != 0 )//防止重复计数
{
cnt;
a[i]=0 ;//标记为已取
}
}
//以下为输出分组结果
printf("array 1:\n" );
cnt=0;
for( i=0;i50;i)
{
if ( a[i] == 0 )
{
cnt;
printf("=", i 1 );
if ( cnt % 5 == 0 ) //每输出5个一换行
printf("\n");
}
}
printf("\n");
printf("array 2:\n" );
for( i=0;i50;i)
{
if ( a[i] )
{
cnt;
printf("=", a[i] );
if ( cnt % 5 == 0 )
printf("\n");
}
}
printf("\n");
return 0;
}
c语言课程设计通讯录 怎样实现好友分组void print()//定义一个自己界面的函数
{
printf("");
printf("");
}
while(1)//main函数里面实现菜单
{
system("cls");//清屏
printf();// 主菜单展示
switch(getchar())
{
case 'A':函数1;break;//比如这个是A分组,自己定义函数1 , 调用清屏、print、和这个分组的print
.
.
.
}
}
c语言统计字符串中字母个数是多少?可以使用以下代码进行统计:
#include
main()
{undefined
int acount=0,bcount=0,ccount=0,dcount=0;
char a;
printf("请输入一行字符:\n");
a = getchar();
while (a !='\n')
{undefined
switch (a)
{undefined
case'q':
case'w':
case'e':
case'r':
case't':
case'y':
case'u':
case'i':
case'o':
case'p':
case'a':
case's':
case'd':
case'f':
case'g':
case'h':
case'j':
case'k':
case'l':
case'z':
case'x':
case'c':
case'v':
case'b':
case'n':
case'm':
case'Q':
case'W':
case'E':
case'R':
case'T':
case'Y':
case'U':
case'I':
case'O':
case'P':
case'A':
case'S':
case'D':
case'F':
case'G':
case'H':
case'J':
case'K':
case'L':
case'Z':
case'X':
case'C':
case'V':
case'B':
case'N':
case'M':
acount;break;
case'1':
case'2':
case'3':
case'4':
case'5':
case'6':
case'7':
【分组函数c语言 c语言分组排序代码】case'8':
case'9':
case'0':
bcount;break;
case' ':
ccount;break;
default:
dcount;break;
}
a= getchar();
}
printf("字母数:%d\n空格数:%d\n数字数:%d\n其他字符:%d\n",acount,ccount,bcount,dcount);
}
分组编写函数:
编写一个函数void fun(char *tt,int pp[]),统计在tt字符中"a"到"z"26各字母各自出现的次数,并依次放在pp所指的数组中 。
#includestdio.h
#includestring.h
void fun(char *tt,int pp[]);
void main()
{
char tt[50];
int pp[26]={0};
printf("Input a string:\n");
gets(tt);
fun(tt,pp);
}
void fun(char *tt,int pp[])
{
int i;
for(i=0;istrlen(tt);i)
{
if(*(tt i) = 'a'*(tt i) = 'z')
pp[*(tt i)-'a'];
}
for(i = 0;i26;i)
printf("%c appeared %d times\n",'a' i,pp[i]);
}
c语言,分组int i,j,group;
printf("请输入要分组的人数:");
scanf("%d", group);
for(i = 0,j = 1;i50;i,j)
{
printf("%d", i);
if(j != group)
{
printf(" ");
}
else
{
printf("\n");
}
}
C语言:随机生成100个数 , 要求分成两组,一组50个数,让这两组的和相差尽量小 。以下函数通过系统时间随机生成1-1000之间的随机数,分成两组后使其总和差值最小 。
算法分析:见源程序中的注释,算法可能有些许额误差,共参考 。
#includestdio.h
#includestdlib.h
#includetime.h
//******************产生长度为length的不为0的可重复随机数组******************//
void radomArray(int *array,int length)
{
srand((unsigned)time(NULL));//使用系统时间作为随机数的种子产生随机数
int i=0,j=0;
while(jlength)
{
i=rand()00;//0-1000的随机数 , 可做修改
if(i!=0)//随机数不为0
{
array[j]=i;
j;
}
}
}
//******************给数组排序,从大到小******************//
void sequence(int * array,int len)
{
int tmp=0;
for(int m=0;mlen;m)
{
for(int n=0;nlen;n)
{
if(array[m]array[n])
{
tmp=array[n];array[n]=array[m];array[m]=tmp;
}
else continue;
}
}
}
//******************将数组拆分为长度为len_01和长度为len_02的两列并总和差值最小******************//
/*算法分析:将有序数组(大到小)中数据依次分别放入数组1、数组2中,并分别统计其现有数据的总和,分别存入dat_01,dat_02中 ,
初始化判断标准dat_01,dat_02为0;
根据数组现有数据总和dat_01和dat_02的关系,确定数据存入数组1还是数组2 。
判断过程:如果数组1现有数据总和小于数组2,同时数组1未到上限 , 将下一个数据存入数组1;
如果数组1现有数据综合不小于数组2 , 同时数组2未到上限 , 将下一个数据存入数组2 。
可能漏洞:数组1或数组2提前到达数组上限,导致原数组中剩余数据直接转入另一数组中,出现异常结果 。*/
void seperate(int *arr,int * arr_01,int *arr_02,int len_01,int len_02)
{
int i=0,j=0,dat_01=0,dat_02=0;
for(int k=0;klen_01 len_02;k)
{
if(dat_01dat_02ilen_01)//如果数组1数据总和小于数组2 , 同时数组1未到上限,将下一个数据存入数组1
{
arr_01[i]=arr[k];
dat_01 =arr[k];
i;
}
else if(dat_01=dat_02jlen_02)//如果数组1数据不小于数组2,同时数组2未到上限,将下一个数据存入数
组2
{
arr_02[j]=arr[k];
dat_02 =arr[k];
j;
}
}
}
//******************计算并返回长度为length的数组的数字总和******************//
int sum(int a[],int length)
{
int total=0;
for(int i=0;ilength;i)
{
total =a[i];
}
return total;
}
//******************主函数开始******************//
void main()
{
int data1=0,data2=0,tmp=0;
int len=100,len_01=50,len_02=50;//修改此处len,len_01,len_02即可修改初始数组长度,注意len_01 len_02=len,同
时最好len_01=len_02,防止出现异常 。
int data[100],data_1[50],data_2[50];//上述len,len_01 , len_02修改后,此处数组长度应相应修改 。
radomArray(data,len);//产生100个数据的随机数组
sequence(data,len);//给随机数组从小到大排序
printf("产生的随机数组从小到大排列为:\n");
for(tmp=0;tmplen;tmp)//输出随机数组
printf("%d\t",data[tmp]);
printf("\n");
seperate(data,data_1,data_2,len_01,len_02);//将数组分为两块,使其总和差值最小
printf("第一块数组为:\n");
for(tmp=0;tmplen_01;tmp)
{
printf("%d\t",data_1[tmp]);
}
printf("\n");
printf("第二块数组为:\n");
for(tmp=0;tmplen_02;tmp)
{
printf("%d\t",data_2[tmp]);
}
printf("\n");
printf("最原始数组的数据总和为:%d\n",sum(data,len));
printf("拆分后数组的数据总和为:%d\n",sum(data_1,len_01) sum(data_2,len_02));
printf("第一块数组的数据总和为:%d\n",sum(data_1,len_01));
printf("第二块数组的数据总和为:%d\n",sum(data_2,len_02));
printf("两块数组数据的的差值为:%d\n",sum(data_1,len_01)-sum(data_2,len_02));
}
运行结果:
产生的随机数组从小到大排列为:
993979970962957935914902888883
871866862859843840829827824815
810808805796784768738730725722
721712711709704702693670670650
631627623623614607606598577574
547498495495481478451448447429
410388383381380379377364344337
308271266257233208204200189165
162155150145143119117114114110
10869646148452216113
第一块数组为:
979970957902883871859840829815
810805768738725721709702670670
631623607606574498495481451447
410383379377337271266233200189
1551451191171141086145113
第二块数组为:
993962935914888866862843827824
808796784730722712711704693650
627623614598577547495478448429
388381380364344308257208204165
1621501431141106964482216
最原始数组的数据总和为:51116
拆分后数组的数据总和为:51116
第一块数组的数据总和为:25559
第二块数组的数据总和为:25557
两块数组数据的的差值为:2
Press any key to continue
分组函数c语言的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c语言分组排序代码、分组函数c语言的信息别忘了在本站进行查找喔 。

    推荐阅读