1. 程式人生 > 其它 >分類任務中效能度量及程式碼

分類任務中效能度量及程式碼

一、什麼是選擇排序法:

對於一串數字:3、5、8、2、6、7、0、1,想要把這串陣列按照從大到小的順序排列,這時候我們可以選擇選擇排序的演算法。

首先:對於第一個位置上(進行選擇的位置)的數字,需要和後面的七個數字(進行比較的位置)進行比較,如果大於,則調換位置,第一輪,可以把最小的數字排到第一個位置上。

其次:對於第二個位置上的數字,需要和後面的六個數字進行比較,如果大於,則調換位置,第二輪,可以把次小的數字排到第二個位置上。

最後,只需要找到排在第七個位置上的數,這八個數字就從大到小拍好了。

因此我麼需要進行七輪,第一輪是把第一個位置上的數和後面進行比較,第二輪是把第二個位置上的數和後面比較,以此類推......

而每一輪比較,都會分為幾個小的比較,第一個位置先和第二個位置比,再和第三個位置比.....

通過上面的分析,我們可以發現,這個演算法需要一層迴圈巢狀,外層自然就是比較的輪數,內層是數字的位置(下標)

二、通過一個程式來理解:

//選擇排序法案例
#include	<stdio.h>

int	main(void)
{
	int names[8]={3,5,8,2,6,7,0,1};//對這個陣列中的元素進行排序
	int dates[8];
	
	for (int i=0;i<8;i++)
	{
		dates[i]=names[i];
	}
	int out_i;
	int in_i;
	for (out_i=0;out_i<7;out_i++)//out_i代表的是比較的輪數,同時也是所要進行選擇的位置。 
	{
		for (in_i=out_i+1;in_i<8;in_i++)//in_i是進行比較的位置,這個位置負責和選擇的位置進行比較,這個位置最大是7 
		{
			if (dates[out_i]>dates[in_i])//因為陣列中的第一個位置是0位置。 
			{
				int agent;
				agent=dates[out_i];
				dates[out_i]=dates[in_i];
				dates[in_i]=agent;
			}
		}
	}
	printf("print the changed array :\n");
	for (int n=0;n<8;n++)
	{
		printf("dates[%d]=%d\n",n,dates[n]);
	}
	printf("print the original array:\n");
	for (int n=0;n<8;n++)
	{
		printf("names[%d]=%d\n",n,names[n]);
	}
	 return	0;
 } 

執行結果如下:

print the changed array :
dates[0]=0
dates[1]=1
dates[2]=2
dates[3]=3
dates[4]=5
dates[5]=6
dates[6]=7
dates[7]=8
print the original array:
names[0]=3
names[1]=5
names[2]=8
names[3]=2
names[4]=6
names[5]=7
names[6]=0
names[7]=1