#include void main() { int a[10]; int i,j,t; printf("input 10 numbers:n"); for(i=0;i
相信學(xué)過(guò)C語(yǔ)言的朋友都知道,在C語(yǔ)言中,常用的排序算法有:冒泡排序、快速排序、插入排序、選擇排序、希爾排序、堆排序以及歸并排序等等。就算沒(méi)有用過(guò),相信大家也有所耳聞。在這里呢,小編主要是想和大家一起來(lái)探討探討C語(yǔ)言的冒泡排序法,大家有什么好的建議可以在評(píng)論里給我留言,希望我們相互學(xué)習(xí),共同進(jìn)步。
材料/工具
Visual C++6.0軟件
所謂冒泡排序法,就是對(duì)一組數(shù)字進(jìn)行從大到小或者從小到大排序的一種算法。 1、具體方法是,相鄰數(shù)值兩兩交換。從第一個(gè)數(shù)值開始,如果相鄰兩個(gè)數(shù)的排列順序與我們的期望不同,則將兩個(gè)數(shù)的位置進(jìn)行交換(對(duì)調(diào));如果其與我們的期望一致,則不
冒泡排序法基本原理
#include int main() { int a[10]; int i,j,t,temp; printf("請(qǐng)輸入10個(gè)數(shù):"); for (i=0;i
所謂冒泡排序法,就是對(duì)一組數(shù)字進(jìn)行從大到小或者從小到大排序的一種算法。具體方法是,相鄰數(shù)值兩兩交換。從第一個(gè)數(shù)值開始,如果相鄰兩個(gè)數(shù)的排列順序與期望不同,則將兩個(gè)數(shù)的位置進(jìn)行交換(對(duì)調(diào));如果其與期望一致,則不用交換。重復(fù)這樣的過(guò)程,一直到最后沒(méi)有數(shù)值需要交換,則排序完成。一般地,如果有N個(gè)數(shù)需要排序,則需要進(jìn)行(N-1)趟起泡,我們以從小到大排序?yàn)槔齺?lái)看一下,具體情況如下圖所示:
#include void main() { int a[10]; int i,j,t; printf("input 10 numbers:n"); for(i=0;i
C語(yǔ)言程序的實(shí)現(xiàn)
冒泡排序(BubbleSort)的基本概念是:依次比較相鄰的兩個(gè)數(shù),將小數(shù)放在前面,大數(shù)放在后面。即在第一趟:首先比較第1個(gè)和第2個(gè)數(shù),將小數(shù)放前,大數(shù)放后。然后比較第2個(gè)數(shù)和第3個(gè)數(shù),將小數(shù)放前,大數(shù)放后,如此繼續(xù),直至比較最后兩個(gè)數(shù),將
首先,為了實(shí)現(xiàn)效果,先定義一組待排序的數(shù)列以及各個(gè)變量。具體情況如下圖:
選擇排序: void select_sort(int a[],int n) //傳入數(shù)組的要排序的元素個(gè)數(shù) {int i,j,min,t; for(i=0;i
算法的實(shí)現(xiàn),具體情況如圖:
先上選擇法和冒泡法: 1.選擇法 #include void main() { int i,j,min,temp; int a[10]; printf("請(qǐng)輸入十個(gè)整數(shù):"); for(i=0;i
運(yùn)行結(jié)果顯示。具體情況如圖
這個(gè)應(yīng)該到網(wǎng)上去搜索啊,不該在這問(wèn)。冒泡排序的原理就是:(升序)依次比較相鄰的2個(gè)數(shù),把較大的值放在后面,使最后一個(gè)數(shù)變成數(shù)組中的最大值。循環(huán)這個(gè)過(guò)程,直到所有的數(shù)據(jù)都按這個(gè)規(guī)則排列好。此時(shí),排序完畢。舉例:3,2,5,7,1 (升序) 1. 3
擴(kuò)展閱讀,以下內(nèi)容您可能還感興趣。
C語(yǔ)言,冒泡排序法從大到小
#抄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]) //數(shù)組襲越界了百,幫度你改了知一下道
{
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]);
}追問(wèn)這樣改之后排序后的第一個(gè)數(shù)就是亂碼追答
我運(yùn)行,怎么沒(méi)出現(xiàn)亂碼勒
C語(yǔ)言冒泡排序法代碼是什么?
所謂冒泡排序法,就是對(duì)一組數(shù)字進(jìn)行從大到小或者從小到大排序的一種算法。
1、具體方法是,相鄰數(shù)值兩兩交換。從第一個(gè)數(shù)值開始,如果相鄰兩個(gè)數(shù)的排列順序與我們百的期望不同,則將兩個(gè)數(shù)的位置進(jìn)行交換(對(duì)調(diào));如果其與我們的期望一致,則不用交換。度重復(fù)這樣的過(guò)程,一直到最后沒(méi)有數(shù)值需要交換,則排序完成。具體情況如下圖所示:
2、為了實(shí)現(xiàn)效果,我們得先定義一組待排序的數(shù)列以及各個(gè)變量。具體情況如下圖:
3、算法知的實(shí)現(xiàn),具體情況如圖:
4、運(yùn)行結(jié)果顯示。具體情況如圖:
5、按照上面的程序,在第五趟(i=5)起泡時(shí),計(jì)算機(jī)不僅要對(duì)“1,5,6,4”兩兩進(jìn)行比較并排序,還要對(duì)“7,8,9,13”進(jìn)行兩兩比較并排序,而“7,8,9,13”在第四趟起泡時(shí)就已經(jīng)排序好了,所以道再進(jìn)行比較的話,就顯得非常多余。圖示如下:
6、在上面程序的基礎(chǔ)上進(jìn)行優(yōu)化。具體情況如圖所示:
7、優(yōu)化后的輸出結(jié)果。如圖所示:
關(guān)于C語(yǔ)言冒泡排序法的問(wèn)題
改好了:
#include &7a686964616fe4b893e5b19e31333238653264quot;stdio.h"
#include "stdlib.h"
void PrintArray(int a[],int n) //輸出排序每一步的結(jié)果
{
int i;
for(i=0;i<n;i++) //通過(guò)循環(huán)輸出元素
printf("%4d",a[i]);
printf("\n");
}
void BubbleSort(int a[],int n) //冒泡排序函數(shù)
{
int i,j,tmp; //tmp為中間變量
int flag; //標(biāo)志變量,如果為0,說(shuō)明不再交換順序,排序結(jié)束
int count=0; //記錄交換次數(shù)
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]) //如果前面的數(shù)比后面的數(shù)大,進(jìn)行交換
{
tmp=a[i];
a[i]=a[j];
a[j]=tmp;
flag=1; //如果發(fā)生交換,標(biāo)識(shí)變量設(shè)為1
}
}
count++; //記錄已經(jīng)發(fā)生的排序次數(shù)
printf("after %d sorting:",count);
PrintArray(a,n); //輸出第count次的排序結(jié)果
if(flag==0) //沒(méi)進(jìn)行一次排序,flag都清0,若交換再發(fā)生,則排序完成
{
return;
}
}
}
void main() //主函數(shù)
{
int *a,n=5,i=0;
a=(int *)malloc(n*sizeof(int)); //為5個(gè)待排序的整型數(shù)開辟儲(chǔ)存空間
for(i=0;i<n;i++)
scanf("%d",&a[i]); //輸入待排序數(shù)
BubbleSort(a,n); //調(diào)用排序函數(shù)進(jìn)行排序
free(a); //排序結(jié)束,釋放儲(chǔ)存空間
}
C語(yǔ)言中冒泡排序法(又稱起泡排序法)得具體程序
冒泡法我是這樣理解的,便抄于掌握和記憶。首先冒泡是n長(zhǎng)度的數(shù)組開始的兩位開始,逐位雙雙比較一直到最后兩個(gè),所以最外循環(huán)比較了n-1次。第一個(gè)數(shù)比較了以后襲就不比知了,從第二個(gè)開始,一直比較到數(shù)組末尾,于是內(nèi)循環(huán)的起始位置不同,每次都是外側(cè)i的值加0,也就是i。但結(jié)束的*和外道層循環(huán)是相同的。于是寫法為for (i=0;i<n-1;i++)
{
for(j=i;j<n-1;j++)更多追問(wèn)追答追答比較a[j]和a[j+1]}}根據(jù)大小需要,決定是否替換兩個(gè)位置的值。
c語(yǔ)言冒泡排序法問(wèn)題(新手)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define k 20 //錯(cuò)誤在這里,你開始2,太小了,設(shè)e79fa5e9819331333332623264置大一點(diǎn),就可以了
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);
}
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com