在线时间67 小时
UID3544921
ST金币647
蝴蝶豆7
注册时间2019-3-14
该用户从未签到
高级会员
- 最后登录
- 2021-3-30
|
本人参考网上对冒泡算法的优化,再一次进行的小小优化,欢迎各位指点
- void bubble4(uint16_t *arr, uint16_t length)
- {
- uint16_t borden_right = length -1; //右边界初始值
- uint16_t borden_left = 0; //左边界初始值为
- uint16_t lastPos = 0; //记录右边界的值
- uint16_t prePos = 0; //记录左边界的值
- uint16_t temp; //交换的中间变量
- uint8_t flag, i, j; //是否有交换的标志
-
-
- for(i = 0; i < length-1; i++)
- {
- flag = 1;
- //正向找出最大值
- for( j = borden_left; j < borden_right; j++)
- {
- if(arr[j] > arr[j+1])
- {
- temp = arr[j];
- arr[j] = arr[j+1];
- arr[j+1] = temp;
- flag = 0;
- lastPos = j;
- }
- }
-
- //正向没发生交换就证明数组已经排好了
- if(flag)
- {
- break;
- }
-
- borden_right = lastPos;
-
- //逆向找出最小值
- for( j = borden_right; j > borden_left; j--)
- {
- if(arr[j] < arr[j-1])
- {
- temp = arr[j];
- arr[j] = arr[j-1];
- arr[j-1] = temp;
- flag = 0;
- prePos = j;
- }
- }
- if(flag)
- {
- break;
- }
-
- borden_left = prePos;
-
- //每排序一次都把数组打印出来
- // for(j = 0; j < length; j++)
- // {
- // USART_SendData(USART1, arr[j]);
- // while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
- // }
- }
- }
复制代码
|
|