程序员成长之旅——C语言冒泡排序

冒泡排序

普通函数排序(整型)
#include<stdio.h>
#include<stdlib.h>
void bubble_sort(int *arr,int sz)
{
 	int i = 0;
 	int j = 0;
 	for (i = 0; i < sz - 1; i++)
 	{
  		for (j = 0; j < sz - i - 1; j++)
  		{
   			if (arr[j] > arr[j + 1])
   		{
    			int tmp = arr[j + 1];
    			arr[j + 1] = arr[j];
    			arr[j] = tmp;
   		}
 		}
 	}
}
void print_sort(int* arr, int sz)
{
 	int i = 0;
 	for (i = 0; i < sz; i++)
 	{
  		printf("%3d ", arr[i]);
 	}
 	printf("\n");
}
int main()
{
 	int arr[] = { 2,5,6,8,14,65,98,63,0,4 };
 	int n = sizeof(arr) / sizeof(int);
 	print_sort(arr, n);
 	bubble_sort(arr, n);
 	print_sort(arr, n);
 	system("pause");
 	return 0;
}

由小到大排序
在这里插入图片描述

库函数排序(任意类型)

库函数:void qsort(void* base,size_t num,size_t width,int(__cdecl* compare)(const void* elem1, const void* elem2));

整数

#include<stdio.h>
#include<stdlib.h>
int  cmp_int(const void* e1, const void* e2)
{
 	return *(int *)e1 - *(int *)e2;
}
void print_sort(int* arr, int sz)
{
 	int i = 0;
 	for (i = 0; i < sz; i++)
 	{
  		printf("%3d ", arr[i]);
	}
 	printf("\n");
}
int main()
{
 	int arr[] = { 2,5,6,8,14,65,98,63,0,4 };
 	int n = sizeof(arr) / sizeof(int);
 	print_sort(arr, n);
 	qsort(arr,n, sizeof(int),cmp_int);
 	print_sort(arr, n);
 	system("pause");
 	return 0;
}

在这里插入图片描述

结构体

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct S
{
 	char name[20];
 	int age;
};
//int s_b_name(const char* e1, const char* e2)
//{
// 	return strcmp(((struct S*)e1)->name, ((struct S*)e2)->name);
//}
int s_b_age(const char* e1, const char* e2)
{
 	return ((struct S*)e1)->age-((struct S*)e2)->age;
}
void output(struct S s[], int n)
{
 	int i = 0;
 	for(i=0;i<n;i++)
 	{
  		printf("%d ", s[i].age);
 	}
 	printf("\n");
 	return;
}
//void test()
//{
// 	struct S arr[] = { {"zhangsan",15},{"lisi",35},{"wangwu",20} };
// 	output(arr, sizeof(arr) / sizeof(arr[0]));
// 	qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof(struct S), s_b_name);
// 	output(arr, sizeof(arr) / sizeof(arr[0]));
//}
void test1()
{
 	struct S arr[] = { {"zhangsan",15},{"lisi",35},{"wangwu",20} };
 	output(arr, sizeof(arr) / sizeof(arr[0]));
 	qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof(struct S), s_b_age);
 	output(arr, sizeof(arr) / sizeof(arr[0]));
}
int main()
{
 	/*test();*/
 	test1();
 	system("pause");
 	return 0;
}

在这里插入图片描述
在这里插入图片描述

自己创建一个函数排序(任意类型)

整数排序:

#include<stdio.h>
#include<stdlib.h>
void swap(char* buf1,char* buf2,int width)
{
 	int i = 0;
 	for (i = 0; i < width; i++)
 	{
  		int tmp = *buf2;
  		*buf2 = *buf1;
  		*buf1 = tmp;
  		buf2++;
  		buf1++;
 	}
}
int cmp_int(const void* e1, const void* e2)
{
 	return *(int*)e1 - *(int*)e2;
}
void bubble_sort(void *base,int num,int width,
 int(* cmp)(const void* e1, const void* e2))
{
 	int i = 0;
 	int j = 0;
 	for (i = 0; i < num - 1; i++)
 	{
  		for (j = 0; j < num - i - 1; j++)
  		{
   			if (cmp((char *)base+j*width,(char*)base + (j+1) * width)>0)
   		{
    			swap((char*)base + j * width, (char*)base + (j + 1) * width,width);
   		}
  		}
 	}
}
void print_sort(int* arr,int sz)
{
 	int i = 0;
 	for (i = 0; i < sz; i++)
 	{
  		printf("%d ", arr[i]);
 	}
 	printf("\n");
}
void test1()
{
 	int arr[] = { 1,3,5,7,9,2,4,6,8,0 };
 	print_sort(arr, sizeof(arr) / sizeof(int));
 	bubble_sort(arr, sizeof(arr) / sizeof(int), sizeof(int), cmp_int);
 	print_sort(arr, sizeof(arr) / sizeof(int));
}
int main()
{
 	test1();
 	system("pause");
 	return 0;
}

在这里插入图片描述
结构体排序:

#include<stdio.h>
#include<stdlib.h>
struct S
{
 	char name[20];
 	int age;
};
void swap(char* buf1,char* buf2,int width)
{
 	int i = 0;
 	for (i = 0; i < width; i++)
 	{
  		int tmp = *buf2;
  		*buf2 = *buf1;
  		*buf1 = tmp;
  		buf2++;
  		buf1++;
 	}
}
int s_b_name(const char* e1, const char* e2)
{
 	return strcmp(((struct S*)e1)->name, ((struct S*)e2)->name);
}
//int s_b_age(const char* e1, const char* e2)
//{
// 	return ((struct S*)e1)->age-((struct S*)e2)->age;
//}
id bubble_sort(void *base,int num,int width,
 int(* cmp)(const void* e1, const void* e2))
{
 	int i = 0;
 	int j = 0;
 	for (i = 0; i < num - 1; i++)
 	{
  		for (j = 0; j < num - i - 1; j++)
  		{
   			if (cmp((char *)base+j*width,(char*)base + (j+1) * width)>0)
   		{
    			swap((char*)base + j * width, (char*)base + (j + 1) * width,width);
   		}
  		}
 	}
}
tput(struct S s[], int n)
{
 	int i = 0;
 	for(i=0;i<n;i++)
 	{
  		printf("%s ", s[i].name);
 	}
 	printf("\n");
}
test2()
{
 	struct S arr[] = { {"zhangsan",15},{"lisi",35},{"wangwu",20} };
 	output(arr, sizeof(arr) / sizeof(arr[0]));
 	qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof(struct S), s_b_name);
 	output(arr, sizeof(arr) / sizeof(arr[0]));
}
int main()
{
 	test2();
 	system("pause");
 	return 0;
}

在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

从零出发——

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值