學(xué)寫簡書
c語言排序算法
兩種方法:選擇與冒泡
-
選擇排序:
首先在未排序序列中找到最刑(大)元素军浆,存放到排序序列的起始位置,然后微饥,再從剩余未排序元素中繼續(xù)尋找最卸喊恰(大)元素,然后放到已排序序列的末尾欠橘。以此類推矩肩,直到所有元素均排序完畢。
特點
若按降序排列肃续,第一次比較:則是將數(shù)組的第一個元素與數(shù)組中從第二個元素開始到最后的元素進行比較找到最大的數(shù)記錄下來然后將值賦值給數(shù)組的第一個元素黍檩,然后進行第二次比較:則是將數(shù)組的第二個元素與數(shù)組中從第三個元素開始到最后的元素進行比較,找最大的數(shù)記錄下來將值賦值給數(shù)組的第二個元素始锚。建炫。。依次循環(huán)找完疼蛾。
代碼:
#include<stdio.h>
void SelectionSort(int *num,int n)
{
int i = 0;
int min = 0;
int j = 0;
int tmp = 0;
for(i = 0;i < n-1;i++)
{
min = i;//每次講min置成無序組起始位置元素下標(biāo)
for(j = i;j < n;j++)//遍歷無序組肛跌,找到最小元素。
{
if(num[min]>num[j])
{
min = j;
}
}
if(min != i)//如果最小元素不是無序組起始位置元素,則與起始元素交換位置
{
tmp = num[min];
num[min] = num[i];
num[i] = tmp;
}
}
}
int main()
{
int num[6] = {5,4,3,2,9,1};
int i = 0;
SelectionSort(num,6);//這里需要將數(shù)列元素個數(shù)傳入衍慎。有心者可用sizeof在函數(shù)內(nèi)求得元素個數(shù)转唉。
for(i = 0;i < 6;i++)
{
printf("%d ",num[i]);
}
return 0;
}
-
冒泡排序:
它重復(fù)地走訪過要排序的數(shù)列,一次比較兩個元素稳捆,如果他們的順序錯誤就把他們交換過來赠法。走訪數(shù)列的工作是重復(fù)地進行直到?jīng)]有再需要交換,也就是說該數(shù)列已經(jīng)排序完成乔夯。因為越大的元素會經(jīng)由交換慢慢“浮”到數(shù)列的頂端砖织,故名“冒泡排序”。
特點
- 比較相鄰的元素末荐。如果第一個比第二個大侧纯,就交換它們兩個;
- 對每一對相鄰元素作同樣的工作甲脏,從開始第一對到結(jié)尾的最后一對眶熬,這樣在最后的元素應(yīng)該會是最大的數(shù);
- 針對所有的元素重復(fù)以上的步驟块请,除了最后一個娜氏;
- 重復(fù)步驟1~3,直到排序完成墩新。
代碼:
#include<stdio.h>
#include<stdlib.h>
void bubblesort(int *p,int len)
{
int i = 0;
int j = 0;
for(i = 0;i<len-1;i++)
{
/*每排序一趟贸弥,則至少有一個元素已經(jīng)有序,
用 j<len-i-1 可以縮小排序范圍 */
for(j = 0;j<len -1-i;j++)
{
/*當(dāng)前面的元素大于后面的元素時海渊,交換位置*/
if(p[j]>p[j+1])
{
int tmp = p[j];
p[j] = p[j+1];
p[j+1] = tmp;
}
}
}
}
int main()
{
int num[5]={3,1,5,6,2};
int i=0;
bubblesort(num,5);
for(i=0;i<5;i++)
{
printf("%d ",num[i]);
}
return 0;
}
printf("%d ",num[i]);
}
return 0;
}
來源:
冒泡排序算法及其優(yōu)化
主函數(shù)為int main()
中的內(nèi)容绵疲。