冒泡選擇排序c語言
㈠ c語言冒泡法和選擇法排序
冒泡
#include<stdio.h>
int n,a[1000];
void print()
{
int i;
for(i=1;i<=n;i++)
printf("%d ",a[i]);
printf(" ");
}
void swap(int x,int y)
{
int t;
t=a[x];
a[x]=a[y];
a[y]=t;
print();
}
int main()
{
int i,j;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
for(i=1;i<n;i++)
for(j=n-1;j>=i;j--)
if(a[j]>a[j+1])
swap(j,j+1);
return 0;
}
我也是略懂,隨手編的
㈡ C語言中,冒泡排序和選擇排序的區別是什麼
選擇排序每一趟從待排序的數據元素中選出最小(或最大)的一個元素,順序放在已排好序的數列的最後,直到全部待排序的數據元素排完。 選擇排序是不穩定的排序方法。 冒泡排序:冒泡排序(BubbleSort)的基本概念是:依次比較相鄰的兩個數,將小數放在前面,大數放在後面。即在第一趟:首先比較第1個和第2個數,將小數放前,大數放後。然後比較第2個數和第3個數,將小數放前,大數放後,如此繼續,直至比較最後兩個數,將小數放前,大數放後。至此第一趟結束,將最大的數放到了最後。在第二趟:仍從第一對數開始比較(因為可能由於第2個數和第3個數的交換,使得第1個數不再小於第2個數),將小數放前,大數放後,一直比較到倒數第二個數(倒數第一的位置上已經是最大的),第二趟結束,在倒數第二的位置上得到一個新的最大數(其實在整個數列中是第二大的數)。如此下去,重復以上過程,直至最終完成排序。
㈢ c語言選擇排序法和冒泡排序法有什麼區別
先上選擇法和冒泡法:
1.選擇法
#include<stdio.h>
void
main()
{
int
i,j,min,temp;
int
a[10];
printf("請輸入十個整數:");
for(i=0;i<=9;i++)
scanf("%d",&a[i]);
for(i=0;i<9;i++)
{
min=i;
for(j=i+1;j<=9;j++)
{
if(a[min]>a[j])
{
min=j;
}
temp=a[j];
a[j]=a[min];
a[min]=temp;
}
}
for(i=0;i<=9;i++)
printf("%4d",a[i]);
}
2.冒泡法
#include<stdio.h>
void
main()
{
int
i,j,temp;
int
a[10];
printf("請輸入十個整數:");
for(i=0;i<=9;i++)
scanf("%d",&a[i]);
for(i=0;i<9;i++)
for(j=9;j>i;j--)
{
if(a[j]<a[j-1])
{
temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;
}
}/*
for(j=0;j<9-i;j++)
{
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}大的氣泡往下沉,小的氣泡往上浮!!!注意:是a[j-1]還是a[j+1];
深刻了解!!!
*/
for(i=9;i>=0;i--)
printf("%4d",a[i]);
}
通過這兩個程序,可以發現他們的編程還是有些區別的,但是總結下:
相同點:
1.都要通過n-1組排出具有n個數的順序;
2.都是通過逐個相比,比出最值的;
。。。
不同點:
1.冒泡法,顧名思義就是把小的泡冒到上面,大的泡沉到下面,最值在中間和其他的值交換;
而選擇法,是假定了一個最值,所以最值和其他的值的交換就發生在假定最值的地方;
。。。
其實冒泡法和選擇法的區別不大,都是效率比較低的方法。
㈣ C語言排序 選擇排序和冒泡排序
幾點建議:
1 C語言有自帶的qsort,就是實現快速排序的。你應該學習使用它就好了。
2 NODE*records[100]; 只能排序最多100個元素嗎?這樣的程序沒有什麼實際意義啊
3 rank函數里,那麼多strcpy,如果有bug的話,你可就有得哭了。
4 那個超級長的if語句啊,你沒有學過switch語句嗎?
㈤ C語言中冒泡排序法和選擇排序法有哪些不同
1、冒泡排序法:一趟一趟的將兩個相鄰的數進行交換如果有10個數則需要排9躺,如果是從
大到小輸出則需要每次將後一個數和前一個數進行比較將較大的數賦值給錢一個數,將較小的數賦值給後一個數,其實就是兩個數交換,那麼第一趟交換完畢後,最
小的數便出現在了數組的最後面,然後進行第二趟的比較時則要對餘下的前9個數進行比較,9趟比較完成後則數組也已經排好序。
2、選擇排序法:10個數則是需要排9次,若按降序排列,第一次比較:則是將數組的第一個元素與數組中從第二個元素開始到最後的元素進行比較找到最大的數記錄下來然後將值賦值給數組的第一個元素,然後進行第二次比較:則是將數組的第二個元素與數組中從第三個元素開始到最後的元素進行比較,找最大的數記錄下來將值賦值給數組的第二個元素。。。依次循環找完
㈥ c語言編程:對10個數冒泡排序(升序)。
#include<stdio.h>
intmain(){
intnumber[10]={95,45,15,78,84,51,24,12,34,23};
for(int j=0;j< 9;j++)
for(int i=0;i< 9 -j;i++) {
if(a[i]>a[i+1]) {
int temp=a[i];a[i]=a[i+1];
a[i+1]=temp; }
}
for(int i=0;i< 10;i++){
printf(「%d」,a[i]); }
}
插入排序
已知一組升序排列數據a[1]、a[2]、……a[n],一組無序數據b[1]、b[2]、……b[m],需將二者合並成一個升序數列。
首先比較b[1]與a[1]的值,若b[1]大於a[1],則跳過,比較b[1]與a[2]的值,若b[1]仍然大於a[2],則繼續跳過,直到b[1]小於a數組中某一數據a[x],則將a[x]~a[n]分別向後移動一位,將b[1]插入到原來a[x]的位置這就完成了b[1]的插入。
b[2]~b[m]用相同方法插入。
快速排序
快速排序是大家已知的常用排序演算法中最快的排序方法。已知一組無序數據a[1]、a[2]、……a[n],需將其按升序排列。首先任取數據a[x]作為基準。
比較a[x]與其它數據並排序,使a[x]排在數據的第k位,並且使a[1]~a[k-1]中的每一個數據<a[x],a[k+1]~a[n]中的每一個數據>a[x],然後採用分治的策略分別對a[1]~a[k-1]和a[k+1]~a[n]兩組數據進行快速排序。
希爾排序
已知一組無序數據a[1]、a[2]、……a[n],需將其按升序排列。
首先取一增量d(d<n),將a[1]、a[1+d]、a[1+2d]……列為第一組,a[2]、a[2+d]、a[2+2d]……列為第二組……,a[d]、a[2d]、a[3d]……列為最後一組以次類推,在各組內用插入排序,然後取d'<d,重復上述操作,直到d=1。
㈦ C語言中冒泡排序法和選擇法的不同是什麼本質區別是什麼
是這樣的
區別主要在交換的方式上
每一輪都把最大或最小的元素篩選出來放在相應的位置上
這是相同的
但是
對於每一輪
比如第一輪
要把1~n
中最大的那個放到n這個位置
冒泡法每次比較和移動相鄰的兩項
而選擇排序每次交換當前項和第n項
我把代碼寫出來你就懂了:
冒泡:
for
i:=1
to
n-1
do
if
(a[i]>a[i+1])
then
swap(i,i+1);
選擇:
for
i:=1
to
n-1
do
if
(a[i]>a[n])
then
swap(i,n);
(swap
表示交換)
總的來說,兩種排序比較的次數是相同的
但交換的次數,選擇排序是更少的
雖然兩者的時間復雜度都是
O(n^2)
但通常,選擇排序更快一點
㈧ c語言三種排序
常用的c語言排序演算法主要有三種即冒泡法排序、選擇法排序、插入法排序。
一、冒泡排序冒泡排序:
是從第一個數開始,依次往後比較,在滿足判斷條件下進行交換。代碼實現(以降序排序為例)
#include<stdio.h>
int main()
{
int array[10] = { 6,9,7,8,5,3,4,0,1,2 };
int temp;
for (int i = 0; i < 10; i++)
{//循環次數
for (int j = 0; j <10 - i-1; j++)
{
if (array[j] < array[j+1])
{//前面一個數比後面的數大時發生交換 temp = array[j];
array[j] = array[j+1];
array[j + 1] = temp;
}
}
} //列印數組 for (int i = 0; i < 10; i++) printf("%2d", array[i]); return 0;}}
二、選擇排序以升序排序為例:
就是在指定下標的數組元素往後(指定下標的元素往往是從第一個元素開始,然後依次往後),找出除指定下標元素外的值與指定元素進行對比,滿足條件就進行交換。與冒泡排序的區別可以理解為冒泡排序是相鄰的兩個值對比,而選擇排序是遍歷數組,找出數組元素與指定的數組元素進行對比。(以升序為例)
#include<stdio.h>
int main()
{
int array[10] = { 6,9,7,8,5,3,4,0,1,2 };
int temp, index;
for (int i = 0; i < 9; i++) {
index = i;
for (int j = i; j < 10; j++)
{
if (array[j] < array[index])
index = j;
}
if(i != index)
{
temp = array[i];
array[i] = array[index];
array[index] = temp;
}
for(int i=0;i<10:i++)
printf("%2d"array[i])
return 0;
}
三、快速排序
是通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然後再按此方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數據變成有序序列。
void QuickSort(int* arr, int size)
{
int temp, i, j;
for(i = 1; i <size; i++)
for(j=i; j>0; j--)
{
if(arr[j] <arr[j-1])
{
temp = arr[j];
arr[j]=arr[j-1];
arr[j-1]=temp;
}
}
}