冒泡排序算法

  • 简单但效率低
  • 从左到右扫描数据,选择最大的数据,放在右边
  • 要点:比较相邻的两个数,如果左边的数大于右边的数就进行交换
  • 假设数组中有n个等待比较的元素,当第一趟排序结束之后,会将最大的元素移到序列的末尾;当第二趟排序结束之后,会将次大的元素移到序列的n-1个位置;当经过n-1次排序之后,就完成了冒泡排序~

C实现如下:需要2个循环

一趟:1跟2 ,2跟3, 3跟4,4跟5, 5跟6, 6跟7, 7跟8, 8跟9, 9跟10:后面比前面高换位,比前面底,不换位———将最大的换到最右边 总共比较9次

二趟:1跟2 ,2跟3, 3跟4,4跟5, 5跟6, 6跟7, 7跟8, 8跟9:后面比前面高换位,比前面底,不换位———将次大的换到n-1位 总共比较8次

所以~每完成一次外循环,内循环比较的次数减一

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

void bubblesort(int *a, int n);

int main()
{ 
	int k;
	int a[10] = {2,4,6,8,0,1,3,5,7,9};
	bubblesort(a, 10);
	for (k = 0; k < 10; k++)
		printf("%d\t", a[k]);
	system("pause");
	return 0;
}

void bubblesort(int *a,int n)
{
	int i, j, t;
	//10个彩条,进行9轮比较,外层循环控制的是比较的轮数
	for (i = 0; i < n - 1; i++)
	{
		//每当外循环进行一次,内循环的比较久减少一次,所以j<n-i-1
		for (j = 0; j < n - i - 1; j++)
		{
			if (a[j]>a[j + 1])
			{
				t = a[j ];
				a[j] = a[j + 1];
				a[j + 1] = t;
			}
		}
	}
}



猜你喜欢

转载自blog.csdn.net/strive_0902/article/details/80227526