1.普通冒泡程序
- void popsort(int* a, size_t n)
- {
- int i = 0;
- int j = 0;;
- int tmp = 0;
- for (i = 0; i < n - 1; i++)
- {
- for (j = 0; j < n - i - 1; j++)
- {
- if (a[j] > a[j + 1])
- {
- tmp = a[j];
- a[j] = a[j + 1];
- a[j + 1] = tmp;
- }
- }
- }
- }
2.设置POS当排序完成之后不进行排序
- //外循环优化->
- void popsort1(int* a, size_t n)
- {
- int i = 0;
- int j = 0;;
- int tmp = 0;
- int Pos = 1;
- for (i = 0; i < n - 1; i++)
- {
- if (Pos == 0)
- break;
- Pos = 0;
- for (j = 0; j < n - i - 1; j++)
- {
- if (a[j] > a[j + 1])
- {
- Pos = 1;
- tmp = a[j];
- a[j] = a[j + 1];
- a[j + 1] = tmp;
- }
- }
- }
- }
3.再次优化:记录冒泡排序的最后一次的位置当排序结束直接结束 :
序的.如果你好好思考一下,看看这个道理到底对不对. 想不来没关系,我还有图!!!
那么优化就很简单了,只需要改变内层for循环判断条件. 每次记录最后一次交换数据的位置K,然后for (j = 0; j < K; j++)这样改变for循环条件即
可.这样我们的优化就完毕了~ 这个时候你的冒泡排序法的效率将会大大提高.你已经很尽力的优化它了. 由于这个优化效果没有办法直观展示.直接
代码实现了: