c語言初學者氣泡排序

暴走的Future發表於2020-11-17

先看一張圖
在這裡插入圖片描述

用函式寫的

void bubble_sort(int arr[], int sz)
{
	int i = 0;
	int temp = 0;
	for (i = 0; i < sz - 1; i++)//迴圈8次
	{
		int j = 0;
		for (j = 0; j < sz - 1 - i; j++)
		{
			if (arr[j]<arr[j + 1])
			{
				temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}
}
void printf_arr(int arr[], int sz)
{
	int i = 0;
	for (i = 0; i < sz; i++)//遍歷陣列元素
	{
		printf("%d ", arr[i]);
	}
}

int main()
{
	int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
	int sz = sizeof(arr) / sizeof(arr[0]);//求陣列大小
	bubble_sort(arr, sz); //排序函式
	printf_arr(arr, sz);//列印函式
	return 0;
}

可能有些人不太明白函式為啥有時候是“void”,是因為void 不需要返回值,排序直接排好,遍歷陣列直接遍歷好,不用再返回去,而比如我下邊寫的這個加法函式,它是“int” 它加完後需要把z的值返回去再拿c接受。

int ADD(int x, int y)
{
	int z = x + y;
	return z;
}
int main()
{
	int a = 1;
	int b = 2;
	int c = ADD(a, b);
	printf("%d\n", c);
	return 0;
}

還有這個sz是怎麼算的?
int型別是 4個位元組,陣列裡邊有9個數字就是36個位元組,sizeof(arr)= 36;sizeof(arr[0])= 4,所以兩個相除就是9,這樣的話就比較靈活,不管陣列裡放幾個數字都只用計算一邊,直接拿來用。

無函式

int main()
{
	int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
	int sz = sizeof(arr) / sizeof(arr[0]);//求陣列大小
	int i = 0;
	int temp = 0;
	//排序
	for (i = 0; i < sz - 1; i++)//迴圈8次
	{
		int j = 0;
		for (j = 0; j < sz - 1 - i; j++)
		{
			if (arr[j]<arr[j + 1])
			{
				temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}
	//遍歷陣列
	for (i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

結果

在這裡插入圖片描述

相關文章