企业网站建设的基本内容,网页设计美工培训,长沙网站制作策划,网站建设服务费费计入什么科目冒泡排序是很easy理解和实现#xff0c;#xff0c;以从小到大排序举例#xff1a; 设数组长度为N。 1#xff0e;比較相邻的前后二个数据#xff0c;假设前面数据大于后面的数据#xff0c;就将二个数据交换。 2#xff0e;这样对数组的第0个数据到N-1个数据进行一次遍… 冒泡排序是很easy理解和实现以从小到大排序举例 设数组长度为N。 1比較相邻的前后二个数据假设前面数据大于后面的数据就将二个数据交换。 2这样对数组的第0个数据到N-1个数据进行一次遍历后最大的一个数据就“沉”到数组第N-1个位置。 3NN-1假设N不为0就反复前面二步否则排序完毕。 依照定义非常easy写出代码 //冒泡排序1
void BubbleSort1(int a[], int n)
{int i, j;for (i 0; i n; i)for (j 1; j n - i; j)if (a[j - 1] a[j])Swap(a[j - 1], a[j]);
}以下对其进行优化设置一个标志假设这一趟发生了交换则为true否则为false。明显假设有一趟没有发生交换说明排序已经完毕。 //冒泡排序2
void BubbleSort2(int a[], int n)
{int j, k;bool flag;k n;flag true;while (flag){flag false;for (j 1; j k; j)if (a[j - 1] a[j]){Swap(a[j - 1], a[j]);flag true;}k--;}
}再做进一步的优化。假设有100个数的数组仅前面10个无序后面90个都已排好序且都大于前面10个数字那么在第一趟遍历后最后发生交换的位置必然小于10且这个位置之后的数据必然已经有序了记录下这位置第二次仅仅要从数组头部遍历到这个位置就能够了。 //冒泡排序3
void BubbleSort3(int a[], int n)
{int j, k;int flag;flag n;while (flag 0){k flag;flag 0;for (j 1; j k; j)if (a[j - 1] a[j]){Swap(a[j - 1], a[j]);flag j;}}
} 冒泡排序毕竟是一种效率低下的排序方法在数据规模非常小时能够採用。数据规模比較大时最好用其他排序方法。 转载于:https://www.cnblogs.com/mfrbuaa/p/3963853.html