白羽
2018-06-22
来源 :网络
阅读 1440
评论 0
摘要:本文将带你了解iOS开发之冒泡排序法,希望本文对大家学IOS有所帮助。
一、算法描述
冒泡排序:依次比较相邻的数据,将小数据放在前,大数据放在后;即第一趟先比较第1个和第2个数,大数在后,小数在前,再比较第2个数与第3个数,大数在后,小数在前,以此类推则将最大的数"滚动"到最后一个位置;第二趟则将次大的数滚动到倒数第二个位置......第n-1(n为无序数据的个数)趟即能完成排序。
以下面5个无序的数据为例:
40 8 15 18 12 (文中仅细化了第一趟的比较过程)
第1趟: 8 15 18 12 40

第2趟: 8 15 12 18 40
第3趟: 8 12 15 18 40
第4趟: 8 12 15 18 40
二、算法分析
平均时间复杂度:O(n2)
空间复杂度:O(1) (用于交换)
稳定性:稳定
三、算法实现
[cpp] view plain copy
1. //交换data1和data2所指向的整形
2. void DataSwap(int* data1, int* data2)
3. {
4. int temp = *data1;
5. *data1 = *data2;
6. *data2 = temp;
7. }
8.
9. /********************************************************
10. *函数名称:BubbleSort
11. *参数说明:pDataArray 无序数组;
12. * iDataNum为无序数据个数
13. *说明: 冒泡排序
14. *********************************************************/
15. void BubbleSort(int* pDataArray, int iDataNum)
16. {
17. for (int i = 0; i < iDataNum - 1; i++) //走iDataNum-1趟
18. for (int j = 0; j < iDataNum - i - 1; j++)
19. if (pDataArray[j] > pDataArray[j + 1])
20. DataSwap(&pDataArray[j], &pDataArray[j + 1]);
21. }
四、算法优化
还可以对冒泡排序算法进行简单的优化,用一个标记来记录在一趟的比较过程中是否存在交换,如果不存在交换则整个数组已经有序退出排序过程,反之则继续进行下一趟的比较。
[cpp] view plain copy
1. /********************************************************
2. *函数名称:BubbleSort
3. *参数说明:pDataArray 无序数组;
4. * iDataNum为无序数据个数
5. *说明: 冒泡排序
6. *********************************************************/
7. void BubbleSort(int* pDataArray, int iDataNum)
8. {
9. BOOL flag = FALSE; //记录是否存在交换
10. for (int i = 0; i < iDataNum - 1; i++) //走iDataNum-1趟
11. {
12. flag = FALSE;
13. for (int j = 0; j < iDataNum - i - 1; j++)
14. if (pDataArray[j] > pDataArray[j + 1])
15. {
16. flag = TRUE;
17. DataSwap(&pDataArray[j], &pDataArray[j + 1]);
18. }
19.
20. if (!flag) //上一趟比较中不存在交换,则退出排序
21. break;
22. }
23. }
24.本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之IOS频道!
喜欢 | 0
不喜欢 | 0
您输入的评论内容中包含违禁敏感词
我知道了

请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号