정수 배열의 버블 정렬을 구현하는 C 언어

우리가 가진 문제는 정렬되지 않은 정수 배열을 오름차순으로 정렬하는 것입니다.

예를 들어 3,1,5,9,2,4,7,6,8,0은 오름차순으로 0,1,2,3,4,5,6,7,8,9가 됩니다.

먼저 논리적 아이디어를 명확히 해야 합니다.
1. 먼저 정렬하려는 정수 배열을 만듭니다.

2. 버블 정렬을 구현하는 사용자 정의 기능

3. 정렬된 배열을 탐색하고 인쇄합니다.

코드는 아래와 같이 표시됩니다.

int main()
{
	int arr[] = { 3,1,5,9,2,4,7,6,8,0 };//创建一个打乱的整形数组
    int sz=sizeof(arr)/sizeof(arr[0]);
	bubble_sort();//自定义的冒泡排序函数将无序的数组排列
	int i = 0;//再将排序好的数组遍历打印出来
	for (i = 0; i < 10; i++)
	{
		printf("%d", arr[i]);
	}
	return 0;
}

다음은 버블정렬 기능 내용  입니다.

버블 정렬의 핵심 아이디어는 인접한 두 숫자를 비교하는 것입니다. 

먼저 int arr[]={3,1,5,9,2,4,7,6,8,0} 배열이 오름차순을 만족하는지 관찰하고, 그렇지 않다면 쌍으로 비교 교환해야 하므로 3과 1을 비교해서 교환하면 그 배열은 1,3,5,9,2,4,7,6,8,0이 되고, 다음 5와 9의 비교는 오름차순 정렬을 만족하므로 굳이 그럴 필요가 없다. 9와 2의 다음 비교는 교환이 필요합니다. 정렬하면 1,3,5,2,9,4,7,6,8,0이 됩니다. 다음으로 9와 4를 비교합니다. 9>4이므로 위치가 바뀌고 9가 마지막 순위가 됩니다. , 최종 배열은 1 3 5 7 6 2 4 8 0 9가 되며 이는 버블 정렬이고 다음 버블 정렬은 두 번째에서 마지막으로 8을 가져옵니다. position, 정렬할 배열은  1 3 5 7 6 2 4 0 8 9가 됩니다. 이는 버블 정렬을 한 번 수행하면 숫자의 위치를 ​​해결할 수 있고, 정렬을 최대 9번 수행하면 정렬이 완료된다는 의미입니다.

코드를 직접 업로드하세요.

void bubble_sort(int arr[],int sz)
{
	int i = 0;
		for (i = 0; i < sz-1; i++)//10个元素进行9趟排序,sz个元素进行sz-1趟排序
		{
			int j = 0;//j代表一个元素的下标,从0开始;
			for (j = 0; j < sz-1-i; j++)//当我们每完成一趟冒泡排序时,就会有一个数字在他相应的位置上,所以每次排序完成后,趟输要减去i;
			{
				if (arr[j] > arr[j + 1])//最后在循环中判断是否满足交换的条件,如果前一个数大于后一个数则交换完成,否则跳出循环
				{
					int tep = arr[j];
					arr[j] = arr[j + 1];
					arr[j + 1] = tep;
				}
			}
		}

}

 사용자 정의 함수에는 반환 유형이 필요하지 않으며 void로 선언됩니다.

한 가지 더 주의할 점: 버블 정렬 패스를 완료할 때마다 해당 위치에 숫자가 있으므로 각 정렬이 완료된 후 패스 손실을 빼야 합니다. 처음에는 9가 마지막 위치에 있으면 정렬에 성공하는 데 8번이 더 걸리고, 두 번째로 정렬이 완료되면 끝에서 두 번째 위치에 8이 생겨서 정렬에 성공하려면 7번이 더 걸립니다. 따라서 변수 i는 정렬 횟수에 따라 증가하며, 증가할수록 증가하므로 i를 빼야 합니다.

최종 코드

#include<stdio.h>
void bubble_sort(int arr[],int sz)
{
	int i = 0;
		for (i = 0; i < sz-1; i++)//10个元素进行9趟排序,sz个元素进行sz-1趟排序
		{
			int j = 0;
			for (j = 0; j < sz-1-i; j++)
			{
				if (arr[j] > arr[j + 1])
				{
					int tep = arr[j];
					arr[j] = arr[j + 1];
					arr[j + 1] = tep;
				}
			}
		}

}
int main()
{
	int arr[] = { 3,1,5,9,8,6,4,2,7,0 };
	int sz = sizeof(arr) / sizeof(arr[0]);//计算元素个数
	bubble_sort(arr,sz);
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

おすすめ

転載: blog.csdn.net/wangduduniubi/article/details/128772211