1、冒泡排序
1.1、冒泡排序算法的運作如下:(從後往前)
1、比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
2、對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
3、針對所有的元素重複以上的步驟,除了最後一個。
4、持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。
1.2、時間複雜度
1.3、穩定性算法
1.4、
#include<stdio.h>
#define SIZE 8
void bubble_sort(int a[],int n)//n爲數組a的元素個數
{
int i,j,temp;
for(j=0;j<=n-1;j++)
{
for(i=0;i<n-1-j;i++)
{
if(a[i]>a[i+1])//數組元素大小按升序排列
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
}
}
}
void main()
{
int number[SIZE]={95,45,15,78,84,51,24,12};
int i;
bubble_sort(number,SIZE);
for(i=0;i<SIZE;i++)
{
printf("%d\n",number[i]);
}
}
2、選擇排序
2.1、算法
每一趟從待排序的記錄中選取關鍵字最小的記錄,順序放在已經排好序的序列最後,直到全部記錄排序完畢
選擇排序的基本思想是對待排序的記錄序列進行n-1遍的處理,第i遍處理是將L[i..n]中最小者與L[i]交換位置。
這樣,經過i遍處理之後,前i個記錄的位置已經是正確的了。
2.2、時間複雜度
2.3、不穩定算法(無關緊要)
2.4、
#include<stdio.h>
#define SIZE 8
void sele_sort(int a[],int n)//n爲數組a的元素個數
{
int i,j,temp;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<=n-1;j++)
{
if(a[i]>a[j])//數組元素大小按升序排列
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
}
void main()
{
int number[SIZE]={95,45,15,78,84,51,24,12};
int i;
sele_sort(number,SIZE);
for(i=0;i<SIZE;i++)
{
printf("%d\n",number[i]);
}
}
3、直接插入排序
3.1、算法
插入排序的基本思想是,經過i-1遍處理後,L[1..i-1]己排好序。第i遍處理僅將L[i]插入L[1..i-1]的適當位置,使得L[1..i] 又是排好序的序列。要達到這個目的,我們可以用順序 比較的方法。首先比較L[i]和L[i-1],如果L[i-1]≤ L[i],則L[1..i]已排好序,第i遍處理就結束了;否則交換L[i]與L[i-1]的位置,繼續比較L[i-1]和L[i-2],直到找到某一個位置 j(1≤j≤i-1),使得L[j] ≤L[j+1]時爲止。
3.2、時間複雜度
3.3、穩定算法
3.4、