當前位置:首頁 » 編程語言 » c語言結構體冒泡排序
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言結構體冒泡排序

發布時間: 2022-09-18 05:24:52

c語言中結構體數據排序

設結構體名為AAA,結構體數組聲明為struct AAA a[N];(N為宏定義常量),身份證成員名為id,則排序函數可如下寫——

#include"stdio.h"
#include<string.h>
#defineN3
structAAA{
charid[20];
intage;
};
voidmysort(structAAA*p){//排序函數
structAAAt;
inti,j,k;
for(i=0;i<N;i++){
for(k=i,j=k+1;j<N;j++)
if(strcmp((p+j)->id,(p+k)->id)<0)
k=j;
if(i!=k)
t=*(p+k),*(p+k)=*(p+i),*(p+i)=t;
}
}
intmain(intargc,char*argv[]){//測試主函數
structAAAa[N]={{"650104194812109907",77},{"333018201801015555",1},{"650104194812109903",80}};
mysort(a);
printf("%s %d ",a[0].id,a[0].age);
printf("%s %d ",a[1].id,a[1].age);
printf("%s %d ",a[2].id,a[2].age);
return0;
}

運行結果:

Ⅱ c語言結構體冒泡排序求教

struct Student
{
int ID;
char Name[10];
};

void sort(Student *a, int n)
{
Student t;
int i, j;
for(i=0;i<n;i++)
for(j=0;j<n-i;j++)
if(a[j].ID>a[j+1].ID)
{
memcpy(&t, &a[j], sizeof(Student));
memcpy(&a[j], &a[j+1], sizeof(Student));
memcpy(&a[j+1], &t, sizeof(Student));
}
}
在結構體賦值中,上面使用memcpy函數,如:
memcpy(&t, &a[j], sizeof(Student));
可以替換為:
t.ID = a[j].ID;
strcpy(t.Name, a[j].Name);
依次類推。

Ⅲ C語言,結構體冒泡排序,按平均分由大到小排列,怎麼弄啊

給你答案希望採納!!!!!!
#include <iostream>
#include<vector>
using namespace std;

struct Student
{
const char* name; //名字
float averageScore; //平均分

};

int main()
{
Student one = { "張三",65.2f };
Student two = { "李四",95.5f };
Student three = { "王二",75.8f };
Student four = { "麻子",88.3f };
Student five = { "提問者",5.0f };

//用數組
Student all[] = { one,two,three,four,five };
int count = 5; //5個學生

cout << "排序之前:\n";
for (int i = 0; i < count; ++i)
cout << all[i].name << "的平均成績為:" << all[i].averageScore << "分\n";
cout << "\n\n\n";

for (int i = 0; i < count - 1; ++i)
{
for (int j = count - 1; j > i; --j)
{
if (all[j].averageScore <= all[j - 1].averageScore)continue;
Student temp = all[j];
all[j] = all[j - 1];
all[j - 1] = temp;
}
}

//測試
cout << "排序之後:\n";
for (int i = 0; i < count; ++i)
cout << all[i].name << "的平均成績為:" << all[i].averageScore << "分\n";
cout << "\n\n\n";

/*
//用數據結構
vector<Student> allStudents;
allStudents.push_back(one);
allStudents.push_back(two);
allStudents.push_back(three);
allStudents.push_back(four);
allStudents.push_back(five);

for (int i = 0; i < allStudents.size() - 1; ++i)
{
for (int j = allStudents.size() - 1; j > i; --j)
{
if (allStudents[j].averageScore <= allStudents[j - 1].averageScore)continue;
Student temp = allStudents[j];
allStudents[j] = allStudents[j - 1];
allStudents[j - 1] = temp;
}
}

*/

return 1;
}

Ⅳ C語言冒泡排序。

#include<stdio.h>

void main()

{

int a[10];

int i,j,t;

printf("input 10 numbers: ");

for(i=0;i<10;i++)

scanf("%d",&a[i]);

for(j=0;j<9;j++) /*進行9次循環 實現9趟比較*/

for(i=0;i<9-j;i++) /*在每一趟中進行9-j次比較*/

if(a[i]>a[i+1]) /*相鄰兩個數比較,想降序只要改成a[i]<a[i+1]*/

{

t=a[i];

a[i]=a[i+1];

a[i+1]=t;

}

printf("the sorted numbers: ");

for(i=0;i<10;i++)

printf(" %d",a[i]);


}

(4)c語言結構體冒泡排序擴展閱讀:

冒泡排序演算法的運作

1、比較相鄰的元素。如果第一個比第二個大(小),就交換他們兩個。

2、對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大(小)的數。

3、針對所有的元素重復以上的步驟,除了最後已經選出的元素(有序)。

4、持續每次對越來越少的元素(無序元素)重復上面的步驟,直到沒有任何一對數字需要比較,則序列最終有序。

簡單的表示

#include <stdio.h>

void swap(int *i, int *j)

{

int temp = *i;

*i = *j;

*j = temp;

}

int main()

{

int a[10] = {2,1,4,5,6,9,7,8,7,7};

int i,j;

for (i = 0; i < 10; i++)

{

for (j = 9; j > i; j--)//從後往前冒泡

{

if (a[j] < a[j-1])

{

swap(&a[j], &a[j-1]);

}

}

}

for (i = 0; i < 10; i++)

{

printf("%d ", a[i]);

}

return 0;

}

參考資料來源:冒泡排序-網路

Ⅳ C語言結構體用冒泡排序法計算結構體中的一個成員,並輸出排序後的結構體

for(j=0;j<3;j++)

改為for(j=0;j<2;j++)

for(i=0;i<3-j;i++)

改為for(i=1;i<3;i++)
看看

Ⅵ C語言結構體冒泡排序交換

j沒有賦值
for循環第二行
j沒有賦值

Ⅶ C語言結構體排序

#include<stdio.h>

struct
{
long long id;
char name[32];
int s;
}t,stus[200];

int main()
{
int n,i,swap=1,sorted=0;

scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%lld %s %d",&stus[i].id,stus[i].name,&stus[i].s);
printf("\n");
while(swap)
{
swap=0;
for(i=0;i<n-1-sorted;i++)
{
if(stus[i+1].s>stus[i].s)
{
swap=1;
t=stus[i];
stus[i]=stus[i+1];
stus[i+1]=t;
}
}
sorted++;
}
for(i=0;i<n;i++)
printf("%lld %s %d\n",stus[i].id,stus[i].name,stus[i].s);
return 0;
}

Ⅷ C語言結構體+冒泡排序,大神幫我改改把它編完吧

#include<stdio.h>
#include<string.h>
#include<stdlib.h>


structstudent
{
charname[20];
intid;
floatscore;
};
voidsort(student*a,intn)
{
studentt;
inti,j;
for(i=0;i<n;i++)
{
for(j=0;j<n-i;j++)
{
if(a[j].score<a[j+1].score)
{
memcpy(&t,&a[j],sizeof(student));
memcpy(&a[j],&a[j+1],sizeof(student));
memcpy(&a[j+1],&t,sizeof(student));
}
}
}
for(i=0;i<n;++i)
{
printf("學生成績排名:%s%d%f ",a[i].name,a[i].id,a[i].score);
}
}
intmain(void)
{
inti,n;
structstudent*m;
printf("請輸入學生人數:");
scanf("%d",&n);
m=(structstudent*)malloc(n*sizeof(student));
for(i=0;i<n;i++)
{
printf("請輸入第%d個學生姓名學號成績:",i+1);
scanf("%s%d%f",m[i].name,&m[i].id,&m[i].score);
}
sort(m,n);
}

請輸入第0個學生姓名學號成績:wgewg 2 33

輸入的時候用空格分開

Ⅸ C語言,用結構體編寫冒泡排序

struct Student
{
int ID;
char Name[10];
};

void sort(Student *a, int n)
{
Student t;
int i, j;
for(i=0;i<n;i++)
for(j=0;j<n-i;j++)
if(a[j].ID>a[j+1].ID)
{
memcpy(&t, &a[j], sizeof(Student));
memcpy(&a[j], &a[j+1], sizeof(Student));
memcpy(&a[j+1], &t, sizeof(Student));
}
}
在結構體賦值中,上面使用memcpy函數,如:
memcpy(&t, &a[j], sizeof(Student));
可以替換為:
t.ID = a[j].ID;
strcpy(t.Name, a[j].Name);
依次類推。