排序算法

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、


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章