数据结构经典比较排序20210108

经典比较排序分类

经典比较排序
交换排序
冒泡排序
快速排序
插入排序
经典插入排序
shell希尔排序插入排序
选择排序
经典选择排序
堆选择排序
归并排序

交换排序

冒泡排序

冒泡排序算法是把较小的元素往前调或者把较大的元素往后调。冒泡排序的基本思想是,首先将第1个和第2个记录的关键字比较大小,如果是逆序的,就将这两个记录进行交换,再对第2个和第3个记录的关键字进行比较,依次类推,重复进行上述计算,直至完成第(n一1)个和第n个记录的关键字之间的比较,此后,再按照上述过程进行第2次、第3次排序,直至整个序列有序为止。排序过程中要特别注意的是,当相邻两个元素大小一致时,这一步操作就不需要交换位置,因此也说明冒泡排序是一种严格的稳定排序算法,它不改变序列中相同元素之间的相对位置关系。

C代码实现冒泡排序

int swap(int *a,int *b)
{
	int temp = *a;
	*a = *b;
	*b = temp;
	return 0;
}

int my_print(int *data,int length,char * msg_info)
{
	int i = 0;
	printf("%s排序的结果:\n",msg_info);
	if (!data[0] || length <= 0)
	{
		return -1;
	}
	
	for(i=0;i<length;i++)
	{
		printf("%d ",data[i]);
	}
	printf("\n");
	return 0;
		
}
/* 冒泡排序 */
int bub_sort(int *data,int length)
{
	int flag = 0;
	int i=0,j=0;
	char buffer[1025] = {0};
	
	for (i=0; i<length;i++,flag=0)
	{
		for (j=0; j<length-i; j++)
		{
		    if(data[j]>data[j+1])
		    {
				swap((data+j), (data+j+1));
				flag = 1;
			}
			
		}
		//sprintf(buffer,"第%d次,冒泡的结果",i+1);
		//my_print(data,length,buffer);
		if (!flag) 
		{
			break;
			
		}
	}
	
}

int main()
{
	int j = 0;
	int data[DATA_ARRAY_LENGTH] = {12,32,2,57,83,92,102,8,205,123,11,55,68,26,66,90};
	printf("排序函数开始\n");
	my_print(data,DATA_ARRAY_LENGTH,"原数据");
	bub_sort(data,DATA_ARRAY_LENGTH);
	my_print(data,DATA_ARRAY_LENGTH,"冒泡排序bub_sort");
	printf("排序函数结束\n");
	
	return 0;
}

快速排序

快速排序的基本思想是:通过一趟排序算法把所需要排序的序列的元素分割成两大块,其中,一部分的元素都要小于或等于另外一部分的序列元素,然后仍根据该种方法对划分后的这两块序列的元素分别再次实行快速排序算法,排序实现的整个过程可以是递归的来进行调用,最终能够实现将所需排序的无序序列元素变为一个有序的序列。

C代码实现快速排序

/* 快速排序 */
int quick_sort(int *data,int length)
{
	int last = 0;
	int j = 1;
	char buffer[1025] = {0};

	
	if(length <= 1)
	{
		
		return 0;
	}
	
	for (j=1; j<length; j++)
	{
		if(data[j]<data[0])
		{
			last++;
			if(last<j)
			{
				swap((data+last), (data+j));
			}
			
		}
	}


	swap(&data[last], &data[0]);

	quick_sort(data,last);

	quick_sort((data+last+1),length-last-1);
	
	return 0;
}


int main()
{
	int j = 0;
	int data[DATA_ARRAY_LENGTH] = {12,32,2,57,83,92,102,8,205,123,11,55,68,26,66,90};

	printf("排序函数开始\n");
	my_print(data,DATA_ARRAY_LENGTH,"原数据");

	quick_sort(data,DATA_ARRAY_LENGTH);
	my_print(data,DATA_ARRAY_LENGTH,"快速排序quick_sort");

	printf("排序函数结束\n");
	
	return 0;
}

插入排序

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Narutolxy

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

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

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

打赏作者

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

抵扣说明:

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

余额充值