『壹』 急!!求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