C语言冒泡排序改进版-创新互联

排序—冒泡排序

1.原理: 比较两个相邻的元素,将值大的元素交换到右边

成都创新互联公司长期为上1000+客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为新县企业提供专业的网站设计、成都网站设计,新县网站改版等技术服务。拥有十载丰富建站经验和众多成功案例,为您定制开发。

2.设计原理:(文字):N个数字要排序完成,总共进行N-1趟排序,每i趟的排序次数为(N-i)次,所以可以用双重循环语句,外层控制循环多少趟,内层控制每一趟的循环次数
举例来说:
在这里插入图片描述
3.冒泡排序的优点: 每进行一趟排序,就会少比较一次,因为每进行一趟排序都会找出一个较大值。如上例:第一趟比较之后,排在最后的一个数一定是大的一个数,第二趟排序的时候,只需要比较除了最后一个数以外的其他的数,同样也能找出一个大的数排在参与第二趟比较的数后面,第三趟比较的时候,只需要比较除了最后两个数以外的其他的数,以此类推……也就是说,每进行一趟比较,每一趟少比较一次。
冒泡排序的代码:

#includevoid Swap(int* x, int* y)
{int tmp = *x;
	*x = *y;
	*y = tmp;
}
void BubbleSort(int* arr, int sz)
{for (int i = 0; i< sz; i++)
	{for (int j = 0; j< sz - 1 - i; j++)
		{	if (arr[j] >arr[j + 1])
			{		Swap(&arr[j], &arr[j+1]);
			}
		}
	}
}
int main()
{int arr[10] = {1,3,5,7,9,2,4,6,8,10 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	BubbleSort(arr,sz);
	return 0;
}
冒泡排序改进版

但是呢冒泡排序有一个弊端:假设数组是这样一组数int arr[5]={5,1,2,3,4};
其实第一轮冒泡排序结束数组就已经排序完成,但是冒泡排序还是会一直进行第二趟冒泡排序,第三趟冒泡排序,第四趟冒泡排序,浪费时间。所以可以对冒泡排序进行优化。

#includevoid Swap(int* x, int* y)
{int tmp = *x;
	*x = *y;
	*y = tmp;
}
int flag = 0;
void BubbleSort(int* arr, int sz)
{for (int i = 0; i< sz-1&&flag==0; i++)
	{int flag = 1;
		for (int j = 0; j< sz - 1 - i; j++)
		{	if (arr[j] >arr[j + 1])
			{		Swap(&arr[j], &arr[j+1]);
				flag = 0;
			}
		}
	}
}
int main()
{int arr[10] = {1,3,5,7,9,2,4,6,8,10 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	BubbleSort(arr,sz);
	return 0;
}

简单来说:当完成了第n趟冒泡排序后再进行第n+1趟时发现前面一个数都是小于后一个数,那么if内的语句不在执行flag=1,冒泡排序不在往后执行程序结束。

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


本文名称:C语言冒泡排序改进版-创新互联
URL分享:http://ybzwz.com/article/cedddo.html