#include void main() { int a[10]; int i,j,t; printf("input 10 numbers:n"); for(i=0;i
相信學過C語言的朋友都知道,在C語言中,常用的排序算法有:冒泡排序、快速排序、插入排序、選擇排序、希爾排序、堆排序以及歸併排序等等。就算沒有用過,相信大家也有所耳聞。在這裏呢,小編主要是想和大家一起來探討探討C語言的冒泡排序法,大家有什麼好的建議可以在評論裏給我留言,希望我們相互學習,共同進步。
材料/工具
Visual C++6.0軟件
所謂冒泡排序法,就是對一組數字進行從大到小或者從小到大排序的一種算法。 1、具體方法是,相鄰數值兩兩交換。從第一個數值開始,如果相鄰兩個數的排列順序與我們的期望不同,則將兩個數的位置進行交換(對調);如果其與我們的期望一致,則不
冒泡排序法基本原理
#include int main() { int a[10]; int i,j,t,temp; printf("請輸入10個數:"); for (i=0;i
所謂冒泡排序法,就是對一組數字進行從大到小或者從小到大排序的一種算法。具體方法是,相鄰數值兩兩交換。從第一個數值開始,如果相鄰兩個數的排列順序與期望不同,則將兩個數的位置進行交換(對調);如果其與期望一致,則不用交換。重複這樣的過程,一直到最後沒有數值需要交換,則排序完成。一般地,如果有N個數需要排序,則需要進行(N-1)趟起泡,我們以從小到大排序爲例來看一下,具體情況如下圖所示:
#include void main() { int a[10]; int i,j,t; printf("input 10 numbers:n"); for(i=0;i
C語言程序的實現
冒泡排序(BubbleSort)的基本概念是:依次比較相鄰的兩個數,將小數放在前面,大數放在後面。即在第一趟:首先比較第1個和第2個數,將小數放前,大數放後。然後比較第2個數和第3個數,將小數放前,大數放後,如此繼續,直至比較最後兩個數,將
首先,爲了實現效果,先定義一組待排序的數列以及各個變量。具體情況如下圖:
選擇排序: void select_sort(int a[],int n) //傳入數組的要排序的元素個數 {int i,j,min,t; for(i=0;i
算法的實現,具體情況如圖:
先上選擇法和冒泡法: 1.選擇法 #include void main() { int i,j,min,temp; int a[10]; printf("請輸入十個整數:"); for(i=0;i
執行結果顯示。具體情況如圖
這個應該到網上去搜尋啊,不該在這問。冒泡排序的原理就是:(升序)依次比較相鄰的2個數,把較大的值放在後面,使最後一個數變成數組中的最大值。循環這個過程,直到所有的數據都按這個規則排列好。此時,排序完畢。舉例:3,2,5,7,1 (升序) 1. 3
擴展閱讀,以下內容您可能還感興趣。
C語言,冒泡排序法從大到小
#抄include<stdio.h>
#include<stdlib.h>
#include<time.h>
void main()
{
int flag,temp,i,j,a[20];
srand((unsigned)time(NULL));
printf("before sorting...\n");
for(i=0;i<20;i++)
a[i]=rand()%1000;
for(i=0;i<20;i++)
printf("%4d",a[i]);
for(i=0;i<20;i++)
{
flag=0;
for(j=0;j<20-i-1;j++)
{
if(a[j]<a[j+1]) //數組襲越界了百,幫度你改了知一下道
{
temp=a[j],a[j]=a[j+1];a[j+1]=temp;
flag=1;}
}
if(flag==0)
break;
}
printf("after sorting...\n");
for(i=0;i<20;i++)
printf("%4d",a[i]);
}追問這樣改之後排序後的第一個數就是亂碼追答
我執行,怎麼沒出現亂碼勒
C語言冒泡排序法代碼是什麼?
所謂冒泡排序法,就是對一組數字進行從大到小或者從小到大排序的一種算法。
1、具體方法是,相鄰數值兩兩交換。從第一個數值開始,如果相鄰兩個數的排列順序與我們百的期望不同,則將兩個數的位置進行交換(對調);如果其與我們的期望一致,則不用交換。度重複這樣的過程,一直到最後沒有數值需要交換,則排序完成。具體情況如下圖所示:
2、爲了實現效果,我們得先定義一組待排序的數列以及各個變量。具體情況如下圖:
3、算法知的實現,具體情況如圖:
4、執行結果顯示。具體情況如圖:
5、按照上面的程序,在第五趟(i=5)起泡時,計算機不僅要對“1,5,6,4”兩兩進行比較並排序,還要對“7,8,9,13”進行兩兩比較並排序,而“7,8,9,13”在第四趟起泡時就已經排序好了,所以道再進行比較的話,就顯得非常多餘。圖示如下:
6、在上面程序的基礎上進行優化。具體情況如圖所示:
7、優化後的輸出結果。如圖所示:
關於C語言冒泡排序法的問題
改好了:
#include &7a686964616fe4b893e5b19e31333238653264quot;stdio.h"
#include "stdlib.h"
void PrintArray(int a[],int n) //輸出排序每一步的結果
{
int i;
for(i=0;i<n;i++) //透過循環輸出元素
printf("%4d",a[i]);
printf("\n");
}
void BubbleSort(int a[],int n) //冒泡排序函數
{
int i,j,tmp; //tmp爲中間變量
int flag; //標誌變量,如果爲0,說明不再交換順序,排序結束
int count=0; //記錄交換次數
printf("initial sorting:");
PrintArray(a,n); //輸出排序前的序列
for(i=0;i<n;i++)
{
flag=0; //初始值爲0
for(j=i+1;j<n;j++)
{if(a[i]>a[j]) //如果前面的數比後面的數大,進行交換
{
tmp=a[i];
a[i]=a[j];
a[j]=tmp;
flag=1; //如果發生交換,標識變量設爲1
}
}
count++; //記錄已經發生的排序次數
printf("after %d sorting:",count);
PrintArray(a,n); //輸出第count次的排序結果
if(flag==0) //沒進行一次排序,flag都清0,若交換再發生,則排序完成
{
return;
}
}
}
void main() //主函數
{
int *a,n=5,i=0;
a=(int *)malloc(n*sizeof(int)); //爲5個待排序的整型數開闢儲存空間
for(i=0;i<n;i++)
scanf("%d",&a[i]); //輸入待排序數
BubbleSort(a,n); //調用排序函數進行排序
free(a); //排序結束,釋放儲存空間
}
C語言中冒泡排序法(又稱起泡排序法)得具體程序
冒泡法我是這樣理解的,便抄於掌握和記憶。首先冒泡是n長度的數組開始的兩位開始,逐位雙雙比較一直到最後兩個,所以最外循環比較了n-1次。第一個數比較了以後襲就不比知了,從第二個開始,一直比較到數組末尾,於是內循環的起始位置不同,每次都是外側i的值加0,也就是i。但結束的*和外道層循環是相同的。於是寫法爲for (i=0;i<n-1;i++)
{
for(j=i;j<n-1;j++)更多追問追答追答比較a[j]和a[j+1]}}根據大小需要,決定是否替換兩個位置的值。
c語言冒泡排序法問題(新手)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define k 20 //錯誤在這裏,你開始2,太小了,設e79fa5e9819331333332623264置大一點,就可以了
void InputName(char StudName[][8]){
int i;
for(i=0;i<8;i++){
gets(StudName[i]);
}
}
void OutputName(char StudName[][8]){
int i;
for(i=0;i<8;i++){
puts(StudName[i]);
}
}
void BubbleSort(char StudName[][8]){
char n[8];
int i,j;
for(i=0;i<8;i++){
for(j=0;j<8-i;j++){
if((strcmp(StudName[j],StudName[j+1])>0)){
strcpy(n,StudName[j]);
strcpy(StudName[j],StudName[j+1]);
strcpy(StudName[j+1],n);
}
}
}
}
void main(){
char StudName[k][8];
InputName(StudName);
BubbleSort(StudName);
OutputName(StudName);
}