C语言实现冒泡排序的两种方法

冒泡排序

冒泡排序是一种比较简单的排序算法,它循环走过需要排序的元素,依次比较相邻的两个元素,如果顺序错误就交换,直至没有元素交换,完成排序。
若对n个人进行排序,我们需要n-1次比较,所以第k次比较需要进行n-k次比较。排序算法通过以数据对象的两两比较作为关键,所以可以得出,冒泡排序需要进行的
比较次数为:(n-1) + (n-2) + … + 1 = n*(n-1) / 2,因此冒泡排序的时间复杂度为O(n^2)

一 .传统方法(适用于小白)

数字冒泡排序

#include<stdio.h>

void bubble_sort(int *arr, int sz)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < sz - 1; i++)
	{   //第一趟循环 sz-1 次
		for (j = 0; j < sz - 1 - i; j++)
		{   //每一趟里面需要比较的个数
			if (arr[j + 1] < arr[j])
			{//冒泡排序-s--两两比较,大的和小的换位置
				int tmp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = tmp;
			}
		}
	}

}
int main()
{
	int arr[10] = { 9,8,7,6,5,4,3,2,1,0 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	bubble_sort(arr, sz);
	int i = 0;
	for (i = 0; i < sz; i++)
	{

		printf("%d ", arr[i]);
	}
	
	return 0;
}

二. 回调函数(实现对数字,字符串的排序)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct Stu
{
	char name[20];
	int age;
};
int cmp_int(const void* e1, const void* e2)
{
	return *(int *)e1 - *(int*)e2;
}


int cmp_by_age(const void* e1, const void* e2)
{
	return ((struct Stu*) e1)->age - ((struct Stu*) e2)->age;
}


int cmp_by_name(const void* e1, const void* e2)
{
	return strcmp(((struct Stu*) e1)->name, ((struct Stu*) e2)->name);
}


void test1()
{
	int arr[10] = { 9,8,7,6,5,4,3,2,1,0 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	qsort(arr, sz, sizeof(arr[0]), cmp_int);
	int i = 0;
	for (i = 0; i < sz; i++)
	{

		printf("%d\n", arr[i]);
	}

}

void test2()
{
	struct Stu s[3] = { {"zhangsan",20},{"lisi",18},{"wangwu",15} };
	int sz = sizeof(s) / sizeof(s[0]);
	qsort(s, sz, sizeof(s[0]), cmp_by_age);
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%s\n", s[i].name);
	}
}

void test3()
{
	struct Stu s[3] = { {"zhangsan",20},{"lisi",10},{"wangwu",15} };
	int sz = sizeof(s) / sizeof(s[0]);
	qsort(s, sz, sizeof(s[0]), cmp_by_name);
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%s\n", s[i].name);
	}

}

int main()
{
	int arr[10] = { 9,8,7,6,5,4,3,2,1,0 };
	struct Stu s[3] = { {"zhangsan",20},{"lisi",10},{"wangwu",15} };

	test1();
	test2();
	test3();

	return 0;
}
发布了25 篇原创文章 · 获赞 5 · 访问量 343

猜你喜欢

转载自blog.csdn.net/weixin_44602007/article/details/104718567
今日推荐