1. 程式人生 > >(c語言)選擇排序法和氣泡排序法

(c語言)選擇排序法和氣泡排序法

問題描述:

給定一個數組(或者輸入一個數組),分別運用選擇排序法和氣泡排序法將所要的結果輸出。

程式分析:

                                        選擇排序

1>.對於選擇排序,首先理解排序的思想。給定一個數組,這種思想首先假定陣列的首元素為最大(最小)的。此時就要利用3個變數i,j,k表示元素的下標。i表示當前,j表示找到的最大(最小)的下標,k用於存放每次迴圈中最大值的下標。

2>.在掌握了程式的基本思想之後,再進行排序。找到最大的下標後賦給k。找到之後判斷所假設的當前值是否為此次迴圈的最大值,如果不是,就交換a[k] 與當前a[i]的值,從而將陣列以一定的順序排放,最後寫一個迴圈將結果輸出。

                                         氣泡排序

1>.對於氣泡排序,主要採用的是相鄰數兩兩進行比較的思想。如果後一個比前一個大(小),則將其調換位置,直至所有的數都比較完。

2>.如果給定一個大小為n的陣列,那麼需要比較n-1趟,每一趟比較n-1-i次 ,i 表示上次迴圈中已經比較完的下標。寫兩個迴圈 判斷,如需交換則進行交換,如果不需要交換則進行下兩個數的比較,直到所有的數比較完。最後,用一個迴圈將排序完成後的數全部輸出。

程式如下:

/*********************選擇排序******************************/
/*#include<stdio.h>

int main()
{
	int i = 0;         //定義一個i並且賦初值為0,i作為陣列的下標
	int j = 0;      //定義j並且賦初值為0,j作為找到最大值時所對應的下標
	int k;            //定義一個k,用來儲存此次迴圈中最大值的下標
	int temp;         //定義一箇中間變數temp,供以後交換值的時候使用
	int a[]={4,5,6,72,1,7,9,3,};    //定義了一個9個數的陣列,並且初始化
	int len = sizeof(a)/sizeof(a[0]);  //len是陣列的大小
	for(i = 0;i<len;i++)        //判斷i是否小於len,執行下面的語句
	{
		k = i;           //假設此次迴圈中的最大值就是當前的值   
		for(j = i+1;j<len;j++)
		{
			if(a[j]>a[k])    //將假設的當前最大值與後面的值比較
			{
				k = j;     //若後面的值更大,則交換下標
			}
		},當前最大值
		if(k != i)       //比較之後如果此次迴圈中最大值並非當前值
		{ 
			temp = a[i];   //將此次迴圈中的最大值與a[k]交換
			a[i] = a[k];
			a[k] = temp;
		}
	}
	for(i=0;i<len;i++)       //利用for迴圈將結果依次輸出
	{
		printf("%d ",a[i]);
	}
	return 0;
}*/
/*************************氣泡排序******************************/
/*#include<stdio.h>

int main()
{
	int i = 0;
	int j = 0;
	int temp;
	int a[10] = {9,8,7,6,5,4,3,2,1,0};
	int len = sizeof(a)/sizeof(a[0]);
	for(i = 0;i<len-1;i++)
	{
		for(j = 0;j< len-1-i;j++)
		{
			if(a[j+1]>a[j])
			{
				temp = a[j+1];
				a[j+1] = a[j];
				a[j] = temp;
				i++;
			}

		}
	}
	for(i = 0;i<len;i++)
	{
		printf("%d ",a[i]);
	}
	return 0;
}*/