冒泡排序bubble_sort和快速排序quick_sort

1.冒泡排序

#include<stdio.h>
#include<stdbool.h>
void swap(int* a, int* b)//交换函数
{
	int temp;
	temp =*a;
     *a = *b;
	*b = temp;
}
void bubble_sort(int arr[],int n)
{
	for (int i = 0; i < n - 1; i++)//冒泡排序至多进行n-1趟
	{
		bool flag = false;
		for (int j = n - 1; j > i; j--)//一趟中,两两进行对比
		{
			if (arr[j - 1] > arr[j])
			{
				swap(&arr[j - 1], &arr[j]);//交换
				flag = true;
			}
		}
		if (flag == false)
			return;//本趟遍历后没变换,说明已经有序
	}
}
void print(int arr[], int n)
{
	int i = 0;
	for (i = 0; i < n; i++)
	{
		printf("%d ", arr[i]);
	}
	printf("\n");

}
int main()
{
	int arr[10] = { 5,7,4,2,1,0,3,6,9,8 };
	int n = sizeof(arr) / sizeof(arr[0]);
	print(arr, n);
	bubble_sort(arr, n);
	print(arr, n);

	return 0;
}

2.快速排序

#include<stdio.h>
int  partition(int arr[], int low, int high)
{
	int pivot = arr[low];//定义枢值
	while (low < high)
	{
		if (low < high && arr[high] >= pivot)
			high--;
		arr[low] = arr[high];
		if (low < high && arr[low] < pivot)
			low++;
		arr[high] = arr[low];
	}
	arr[low] = pivot;
	return low;
}
void quick_sort(int arr[], int low, int high)
{
	if(low<high)
	{
		int pivotpos=partition(arr, low, high);//划分
		quick_sort(arr, low, pivotpos - 1);//划分左部分
		quick_sort(arr, pivotpos + 1, high);//划分有部分
	}
}
void print(int arr[], int n)
{
	int i = 0;
	for (i = 0; i <n; i++)
	{
		printf("%d ", arr[i]);
	}
	printf("\n");

}
int main()
{
	int arr[10] = { 5,7,4,2,1,0,3,6,9,8 };
	int n = sizeof(arr) / sizeof(arr[0]);
	print(arr, n);
	quick_sort(arr,0, n-1);
	print(arr, n);

	return 0;
}

猜你喜欢

转载自blog.csdn.net/m0_69576880/article/details/127870752