冒泡排序法c语言?
C语言冒泡排序算法
用冒泡排序法对任意输入的 10 个数按照从小到大的顺序进行排序。实现过程:(1) 通过两个 for 循环实现冒泡排序的全过程,外层 for 循环决定冒泡排序的趟数,内层 for 循环决定每趟所进行两两比较的次数。
(2) 程序代码如下:
运行结果:
请输入10个数:66 32 23 45 25 5 15 69 46 37排序后的顺序是: 5 15 23 25 32 37 45 46 66 69
技术要点:
本实例要求用冒泡法对 10 个数由小到大进行排序,冒泡法的基本思路是,如果要对 n 个数进行冒泡排序,那么要进行 n-1 趟比较,在第 1 趟比较中要进行 n-j 次两两比较,在第 j 趟比较中要进行 n-j 次两两比较。从这个基本思路中就会发现,趟数决定了两两比较的次数,这样就很容易将两个 for 循环联系起来了。
c语言链表冒泡排序问题
- 这个链表能帮我写个冒泡排序的程序么(按成绩排序)#include stdio.h#include stdlib.h#include malloc.h#define E sizeof(NODE)typedef struct ssxd{char name[15];int nl;double cj;char QQ[15];char sj[15];struct ssxd *pHoat;}NODE , *PNODE;PNODE create_list (void);创建链表void traverse_list (PNODE);遍历链表int main (void){int len;PNODE pHew = NULL;pHew = create_list ();traverse_list (pHew);if (is_empty(pHew))printf("链表为空!n");elseprintf("链表不为空!n");len = length_list (pHew);printf("该链表共记录了%d个学生的信息!n", len);printf("对链表进行排序:");sort_list (pHew);traverse_list (pHew);return 0;}PNODE create_list (void){int len;int i;NODE val;PNODE pHew = (PNODE)malloc(E);if (NULL == pHew){printf("内存分配失败!程序结束!n");exit (-1);}printf("输入学生人数:");scanf("%d", &len);PNODE p = pHew;p-pHoat = NULL;for (i=0; ilen; i++){printf("第%d个学生:n", i+1);printf(" 姓名:");scanf("%s", val.name);printf(" 年龄:");scanf("%d", &val.nl);printf(" 成绩:");scanf("%ld", &val.cj);printf(" QQ:");scanf("%d", val.QQ);printf(" 手机号:");scanf("%d", val.sj);printf("n");PNODE pHat = (PNODE)malloc(E);if (NULL == pHat){printf("内存分配失败!程序结束!n");exit (-1);}*pHat = val;p-pHoat = pHat;pHat-pHoat = NULL;p = pHat;}return pHew;}void traverse_list (PNODE pHew){int i = 1;PNODE p = pHew-pHoat;while (NULL != p){printf("【%d】n", i++);printf(" 姓名:%sn", p-name);printf(" 年龄:%dn", p-nl);printf(" QQ:%dn", p-QQ);printf(" 手机号:%dnn", p-sj);p = p-pHoat;}return ;}
- 链表最好用插入排序,冒泡法实现起来很麻烦!
谁给讲一下c语言冒泡排序的逻辑思维过程,理解不到位
- for(i=1;in-1;i++){ k=i; 【我理解的是随机找一个i位置上的数】, for(j=i+1;jn;j++) if(strcmp(array[k],array[j])0) 【 在i位置右边找一个比选定的数来的小的数,在j位置上】 k=j; 【把j赋值给k】 if(k!=i) { strcpy(temp,array[i]); strcpy(array[i],array[k]); strcpy(array[k],temp); } 【交换k和j位置上的数】 不理解的是怎么做到循环完整的,不会漏掉某些数值吗?问题补充: if(k!=i)这个条件又是做什么用的?
- 其实就是把数组的第一个数据排到相应的位置, 然后第二个变成第一个.这样就再循环.
C语言 链表的冒泡排序问题 新手求助
- 要求是先建立一个由浮点数据组成的无序链表,然后要求将这些数据进行排序后输出。下面是我写的代码,想用冒泡排序实现,但是执行后没有反应,请问是哪里出错了?#include stdio.h #include malloc.hstruct node{float data;struct node *next;};struct node *create()这是我想建立一个链表{ struct node *head,*tail,*p; float x; head=tail=NULL; printf("请输入一个数n"); scanf("%f",&x); while (x!=0)这里是我想用0来控制链表建立结束 { p=(struct node *)malloc(sizeof(struct node)); p-data=x; p-next=NULL; if (head==NULL) head=tail=p; else {tail-next=p; tail=p;} printf("请输入一个数n"); scanf("%f",&x); } return (head);}void order (struct node *head)这是我想实现冒泡排序的部分{ struct node *p,*q; int j=0,k=0; float temp; p=head; for (;p!=NULL;j++);我这是想求出链表长度 for (p=head,q=p-next;kj;k++) {for (;q!=NULL;p=q,q=q-next) { if (p-dataq-data) {temp=p-data; p-data=q-data; q-data=temp;} } }}int main(void){ struct node *q,*p;q=create();p=q;order (q);while (p!=NULL){printf("%ft",p-data);p=p-next;}return 0;}
- for (;p!=NULL;j++)p=p-next;我这是想求出链表长度
C#语言实现冒泡排序,应该有n-1趟比较的,怎么看这个程序就只有一趟啊,求指教?
- using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace BubbleSort{ class Program { static void Main(string[] args) { int[] arr = new int[] { 99, 88, 77, 66, 55, 44, 33, 22 };定义一个一维数组,并赋值 Console.Write("初始数组:"); foreach (int m in arr)循环遍历定义的一维数组,并输出其中的元素 Console.Write(m + " "); Console.WriteLine(); 定义两个int类型的变量,分别用来表示数组下标和存储新的数组元素 int j, temp; for (int i = 0; i arr.Length – 1; i++)根据数组下标的值遍历数组元素 { j = i + 1; id:定义一个标识,以便从这里开始执行语句 if (arr[i] arr[j])判断前后两个数的大小 { temp = arr[i];将比较后大的元素赋值给定义的int变量 arr[i] = arr[j];将后一个元素的值赋值给前一个元素 arr[j] = temp;将int变量中存储的元素值赋值给后一个元素 goto id;返回标识,继续判断后面的元素 } else if (j arr.Length – 1)判断是否执行到最后一个元素 { j++;如果没有,则再往后判断 goto id;返回标识,继续判断后面的元素 } } Console.Write("排序后的数组:"); foreach (int n in arr)循环遍历排序后的数组元素并输出 Console.Write(n + " "); Console.ReadLine(); } }}这个程序和百度百科上的程序实现不同,应该是里外两层循环,怎么这个程序就只有一层似得,是哪里断片了?
- 你看到它的goto没,它实现的就是类似于内层循环的那个功能,不推荐使用。
用C语言实现单向链表的直接插入排序,冒泡排序和选择排序
- 求写程序
- 先把链表的基本操作实现;把排序的算法搞懂;搞不懂了多画画图,就会了
C语言冒泡排序,求告知哪错了。。。
- #include stdio.hmain(){int a[5]={5,8,9,3,1},i,j,t;for(i=0;i=4;i++){for(j=0;j=i;j++){if(a[j]a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}}for(i=0;i=4;i++){printf("%dn",a[i]);}}}
- #include stdio.hint main()我不知道你用的是不是C或者GCC,如果是,前面就不用加int{int a[5]={5,8,9,3,1},i,j,t;for(i=0;i=4;i++){for(j=0;ji;j++)这里应该是j i而不是=,不然你下面的a[j+1]会数组越界{if(a[j]a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}}}for(i=0;i=4;i++)然后你这里输出,应该是输出最后排序之后的数组吧?应该放到循环外面吧?{printf("%dn",a[i]);}}
C语言地冒泡排序算法 冒泡法思路:依次将相临的两个数进行比较,将小的数调到前面,从a[0]开始,依
- C语言地冒泡排序算法冒泡法思路:依次将相临的两个数进行比较,将小的数调到前面,从a[0]开始,依次将其和后面的元素比较,若a[0]a[i],则交换它们,一直比较到a[n]。同理对a[1],a[2],…a[n-1]处理,即完成排序。冒泡法排序#includestdio.hvoid main(){int a[10]; 定义一个数组既它的元素为10int i,j,temp; 定义3个变量printf("输入10个整数:na");for(i=0;i10;i++) scanf("%d",&a[i]); 依次输入10个整数for(i=0;i9;i++) 进行9轮排序{ for(j=0;j9-i;j++) 每轮进行9-i次交换 if(a[j]a[j+1]) { temp=a[j]; a[j]=a[j+1]; 大的沉底,小的上浮 a[j+1]=temp; }}printf("排序结果:");for(i=0;i10;i++) 依次输出排序结果 printf("%dt ",a[i]);}其中 if(a[j]a[j+1]) 是对数组比大小吗?看不懂啊,大家能不能帮我详细解释一下冒泡算法
- 不妨先简化一下这个问题,找出10个数中的最大数(按这段代码是沉到最下面)假设有10个数,这样排列,无规则,数字只代表序号。把排序问题当做进行10次【把最大的数沉到最下面】这一步。因为第一次把最大的数解决完了,第二轮比较只要在剩下9个数之间进行。以此类推,每次比较都少一个数。
c语言中运行是有问题是怎么回事?(冒泡排序)
- 感觉不是scanf 的问题代码如下#include stdio.h#include stdlib.h#include string.hvoid BubbleSort(char wordList[][30], int n);int main(){ static char words[30][30]; int i; for (i=0;words[i][0]==$;i++) { scanf("%s",words[i]); } BubbleSort(words,i-2); return 0;}void BubbleSort(char wordList[30][30], int n){ int i,j; static char term[30]; for(i=0;wordList[i]!=0;i++) { for (j=1;wordList[i+j]!=0;j++) { if (strcmp(wordList[i],wordList[i+j])0) { strcpy(term,wordList[i+j]); strcpy(wordList[i+j],wordList[i]); strcpy(wordList[i],term); } } } for (j=0;ji;j++) { printf("%sn",wordList[j]); }}问题补充: 只发现了一个问题,还有其他的毛病存在,大家还是帮忙看看吧
- 求采纳、、、、
C语言冒泡排序问题
- #include stdio.h#include stdlib.h#define N 10void choise(int b[],int n){int i,j,k,temp; for(i=0;in-1;i++) {for(j=1;jn;j++) if(b[i]b[j]) {temp=b[i]; b[i]=b[j]; b[j]=temp; } }}int main(){ int a[N],i; printf("输入%d个数字进行排序:n",N); for(i=0;iN;i++) {printf("输入第%d个数字:",i+1); scanf("%d",&a[i]); } choise(a,N); printf("排序结果为:"); for(i=0;iN;i++) { printf(" %d",a[i]); } return 0;}为什么不对 求告知
- 这个不叫冒泡排序,这是选择排序