C語言之排序算法

排序算法是算法裏面的基礎,算法主要是考驗思維,在這裏會介紹三個簡單的算法:直接插入排序,選擇排序,冒泡排序。

直接插入排序
直接插入排序經過 n-1 次循環將需要排序的元素排序好,每一次循環依次添加一個後面的新元素到前面排好序的元素中,時間複雜度爲(n^2)。代碼如下

/*
直接插入排序
參數:需要排序的數組,數組中元素的個數
返回值:無
*/
void Zhi_Jie(int a[],int num)
{
	int n,m,z,k;
	for(n = 0;n < num;n++)
	{
		z = a[n];
		m = n-1;
		while((m >= 0) && (z < a[m]))
		{
//			a[m+1] = a[m--];//方法一,一步到位,讓人看得更加清楚,下面是分解的寫法
			k = a[m+1];
			a[m+1] = a[m];
			a[m] = k;
			m--;
		}
		a[m+1] = z;//找到了要插入的位置
	}
}

選擇排序:
選擇排序也是經過n-1次循環將需要排序的元素排序好,每一次循環是尋找後面元素中最小/最大的元素,插入到前面排好序的後面,時間複雜度爲(n^2)。代碼如下

/*
選擇排序實現排序
參數:需要排序的數組,數組中元素的個數
返回值:無
*/
void Xuan_Ze(int a[],int num)
{
	int m,n,z,k;
	for(m = 0;m < num-1;m++)
	{
		z = m;
		for(n = m+1;n < num;n++)
			if(a[z] > a[n])
				z = n;
		if(m != z)//標誌位發生了變換,說明大小發生的改變
		{
			k = a[z];
			a[z] = a[m];
			a[m] = k;		
		}
	}
}

冒泡排序
冒泡排序也是經過n-1次循環將需要排序的元素排序好,每一次循環找到最大/最小的元素,移動到後面排好序的元素前,時間複雜度爲(n^2)。代碼如下

/*
冒泡的方法實現排序
參數:需要排序的數組,數組中元素的個數
返回值:無
*/
void Mao_Pao(int a[],int num)
{
	int m,n,z;
	for(m = 0;m < num;m++)
		for(n = m+1;n < num;n++)
			if(a[m] > a[n])
			{
				z = a[m];
				a[m] = a[n];
				a[n] = z;
			}
}

接下來就是主函數的了,代碼如下:

#include"stdio.h"

//宏定義數組中元素的個數
#define test_num 5    

//這裏加上上面寫的函數即可。

int main()
{
	int a[test_num];
	int i;
	printf("請輸入%d個數字,每輸入完一個就回車一次:\n",test_num);
	for(i = 0;i < test_num;i++)
	{
		scanf("%d",&a[i]);
	}
	printf("你輸入的數字是 :");
	for(i = 0;i < test_num;i++)
	{
		printf("%d ",a[i]);
	}	
	printf("\n");

//排序操作
//	Mao_Pao(a,test_num);
//	Zhi_Jie(a,test_num);
//	Xuan_Ze(a,test_num);

	printf("排序之後的順序爲 :");
	for(i = 0;i < test_num;i++)
	{
		printf("%d ",a[i]);
	}	
	printf("\n");
	return 0;
}

排序算法重在思維上的理解,理解好了之後操作起來就不難了,這三個都是比較基礎的排序算法,有問題或者有建議的小夥伴可以添加我的個人微信 lqy—1997 (中間是三個英文的槓)或者留言進行交流。

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