正文
分组函数c语言 c语言分组排序代码
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
C语言利用递归实现插入排序,选择排序,快速排序,归并排序算法。 要求有注释 ! 谢谢各位大神!
//InsertionSort
void insertionSort(int a[], int size) {
int i, j, key;
for (i = 0; i size; i++) {
key = a[i];
j = i-1;
while (j = 0 key a[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 - p + 1,
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; i n1; i++)
array1[i] = a[p + i];
for(i = 0; i n2; i++)
array2[i] = a[q + 1 + i];
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 (p r) {
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; j r; j++)
if (x a[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 (p r) {
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( i p || i r)
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(p r){
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; j i; 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( cnt 25 ) //随机取25个
{
i=rand()%50 ;
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("%3d", 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("%3d", 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':
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;i 26;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;i 50;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()%1000;//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));
}
运行结果:
产生的随机数组从小到大排列为:
993 979 970 962 957 935 914 902 888 883
871 866 862 859 843 840 829 827 824 815
810 808 805 796 784 768 738 730 725 722
721 712 711 709 704 702 693 670 670 650
631 627 623 623 614 607 606 598 577 574
547 498 495 495 481 478 451 448 447 429
410 388 383 381 380 379 377 364 344 337
308 271 266 257 233 208 204 200 189 165
162 155 150 145 143 119 117 114 114 110
108 69 64 61 48 45 22 16 11 3
第一块数组为:
979 970 957 902 883 871 859 840 829 815
810 805 768 738 725 721 709 702 670 670
631 623 607 606 574 498 495 481 451 447
410 383 379 377 337 271 266 233 200 189
155 145 119 117 114 108 61 45 11 3
第二块数组为:
993 962 935 914 888 866 862 843 827 824
808 796 784 730 722 712 711 704 693 650
627 623 614 598 577 547 495 478 448 429
388 381 380 364 344 308 257 208 204 165
162 150 143 114 110 69 64 48 22 16
最原始数组的数据总和为:51116
拆分后数组的数据总和为:51116
第一块数组的数据总和为:25559
第二块数组的数据总和为:25557
两块数组数据的的差值为:2
Press any key to continue
分组函数c语言的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c语言分组排序代码、分组函数c语言的信息别忘了在本站进行查找喔。