‘壹’ 急!!求c语言单链表冒泡排序的详细流程图
#include<stdio.h> #include<malloc.h> struct number { int num; struct number *next; }; void main() { struct number *head; struct number *p1,*p2,*p,*p3,*p4; int n=0,m,i,j; p1=p2=(struct number *)malloc(sizeof(struct number)); printf("\nWang jianfei 060806110006\n\n\n"); printf("Please enter the number: \n"); scanf("%d",&p1->num); head=NULL; while(p1->num!=NULL) { n=n+1; if(head==NULL) head=p1; else p2->next=p1; p2=p1; p1=(struct number *)malloc(sizeof(struct number)); scanf("%d",&p1->num); } p2->next=NULL; p=head; for(p4=head;p4!=NULL;p4=p4->next) { for(p3=head;p3->next!=NULL;p3=p3->next) { if(p4->num>p3->num) { m=p4->num; p4->num=p3->num; p3->num=m; } } p=head; } printf("\nNow,there %d numbers are: ",n); p=head; printf("\n"); if(head!=NULL) do { printf("%5d ",p->num); p=p->next; }while(p!=NULL); printf("\n"); getch(); }
‘贰’ 100个数内用冒泡排序升序降序排列的流程图(急救)
//举个例子吧:
43286/*4和3比4大不用管(43286),3和2比3大也不用管
(43286),2和8比8大8往前移(43826),2和6比6大6往前移(43862)
第一轮结束了最终是43862*/
//第二轮
43862/*4和3比4大不动(43862),3和8比8大,8前移(48362),
3和6比6大6前移(48632),3和2比3大不动(48632),第二轮结束,最终是48632*/
//以此类推第三轮
86432
//所谓冒泡排序就是大数往下沉,小数往上升,这是正序倒序相反
‘叁’ 冒泡排序法是如何排序的
冒泡排序算法的原理:
1、比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2、对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3、针对所有的元素重复以上的步骤,除了最后一个。
4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
(3)冒泡算法的流程图扩展阅读:
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。
它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。
这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。
算法稳定性:
冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,是不会再交换的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。
‘肆’ 冒泡排序流程图
冒泡第一次:14 15 28 5 10 30
冒泡第二次:14 15 5 10 28 30
冒泡第三次:14 5 10 15 28 30
冒泡第四次:5 10 14 15 28 30
选择排序我忘记了!
‘伍’ 冒泡流程图
#include <iostream>
using namespace std;
//冒泡排序,升序排列,时间复杂度O(n^2),如果原始数据已经有序则复杂度为n
void bubblesort(int r[],int n)
{
int i,j,flag;
for (i=1;i<=n;i++)
{
flag=1; //设置交换标志,flag=1时为未交换
for (j=1;j<=n-i;j++)
if (r[j+1]<r[j])
{
flag=0; //已交换
r[0]=r[j];r[j]=r[j+1];r[j+1]=r[0];
}
if (flag !=0) break; //未交换,排序结束
}
}
int main ()
{
const int maxsize=10;
int r[maxsize+1];
for (int i=1;i<=maxsize;i++)
{
cin>>r[i];
}
bubblesort (r , maxsize);
for ( i=1;i<=maxsize;i++)
{
cout<<r[i]<<endl;
}
return 1;
}
‘陆’ 冒泡排序从小到大流程图
略 可以按照冒泡排序的方法及过程对所给数据逐趟进行排序. 我们将第一趟的排序过程详细写出,其余各趟的排序过程不再详细列出,如图所示; 第1趟 上述算法的流程图如图所示: 冒泡排序的算法过程中主要以循环结构和选择结构为主,同时也用到了变量与赋值.
‘柒’ 给出冒泡排序算法的简要说明,画出流程图,并写出使用冒泡算法对三个数3,4,1进行排序的过程。
以升序排序为例
第一步:对整个待排序数列,从头开始,对相邻的两个数进行比较,如果前者>后者,则交换,直至末尾;(这个过程称之为“一趟”,一趟完成之后,最末尾的数字一定是数列中最大的了。所以下一趟不再考虑最末尾的数字。)
第二步:待排序数列为除了最末尾数字的数列,重复上述步骤;
第三步:待排序数列为除了最末尾两个数字的数列,重复第一步;
……
第n步:待排序数列为最开头数字的数列,这时,所有的数都已排好序。
处理结束。
对三个数3,4,1进行排序的过程:
第一趟:对3,4,1排序,比较3,4——3>4?否,不交换;比较4,1,4>1?是,交换。没有更多需要比较的数,第一趟结束,最大值4已经在末尾,下一趟不再考虑。
第二趟:对3,1排序,比较3,1——3>1?是,交换。没有更多需要比较的数,第二趟结束,末尾的3,4,都不再考虑。
第三趟:对1排序,只剩一个数,没什么可以比较的了。处理结束。
最终排序结果即:1,3,4。
‘捌’ 求教哪位大神能帮我把这个冒泡排序的流程图画出来,看着这些代码头都大了也看不懂……
流程图不太好画,我说一下过程,希望能帮到你
你选中的代码的意思就是,如果数组中相邻两个数中前者比后者大,就将两个数互换,这样在经过了一次外层循环(内层循环进行了array.length次)后,最大的数就被放到了数组的最后位置(本题就是856放在了最后),然后再循环一次,第二大的数(836)就放在了最大数(856)的前面,依次类推,最后一次循环把最小的数(4)放在第二小的数(6)前面,这样所有的数都保证了前面的数比后面的小,也就完成了排序。
‘玖’ 求人做一份冒泡算法流程图!!递交后追加200分!!
冒泡排序法流程图如下。程序代码很简单,要的话说一声
Dima(0To99)AsString
PrivateSubCommand1_Click()
DimiAsInteger,jAsInteger,str1AsString
Fori=0To98
Forj=i+1To99
Ifa(j)>a(i)Then'字符串比较,逆序。反之用<
str1=a(i):a(i)=a(j):a(j)=str1'后面的大就交换
EndIf
Nextj
Nexti
Fori=0To99
Debug.Printa(i),
Nexti
EndSub
PrivateSubForm_Load()
Command1.Caption="排序"
DimiAsInteger,jAsInteger,kAsInteger
'以下程序代替你输入100个字符串
Randomize
Fori=0To99
k=Int(Rnd*9+2)'一个字符串的长度2到10
str1=""
Forj=1Tok
a(i)=a(i)&Chr(Int(Rnd*26)+97)'产生字符
Nextj
Debug.Printa(i),
Nexti
Debug.Print
EndSub