排序算法的总结
来源:互联网 发布:科目二模拟软件 编辑:程序博客网 时间:2024/05/18 15:07
1>冒泡排序
原理:拿相邻的数比较,如果a[i]>a[i+1] ,两者互换,那么第一轮就会把最大的数拍到最后一个。
(规模响应减小,且每一轮都可以得到正确结果)
优化:设立一个flag,把他放在每一轮最后不在交换的位置,那么在flag之后的数都是有序的。
2>插入排序
原理:那一个数和他前面的数比较,如果它小于它前面的数,就把它前面的数放到它的位置上,那就空出一个位置,最终可以找到合适的位置,放入取出的数。
第一个数从数组第二个开始取,保证取得数的前面都是有序的。
本质:通过移动,把数插入到有序数列中。 (缺点:很多数会重复移动)
3>选择排序
实质上,前面的冒泡排序就是一种简单的选择排序,选择最大的放入到指定位置,但是他是通过不断交换得到的,而选择排序是通过比较得到最大的数,直接赋值得到,稍微比冒泡优化。
1.一般的选择排序原理:
取最后一个数的下标存入到max域中,把最后一个数依次和前面的数比较,发现比它大的数,那么就把比较大的数的下标存入max域中,当一轮遍历完成,就把max域代表的数和选择的数进行互换。
2.优化的选择排序原理:
我们可以看到,一般选择排序是采用选择最大或者最小来作为标准。其实比较的同时,能找到最大的数,肯定也能找到最小的数。
第一轮, 取第一个数的下标存入min域,最后一个数的下标存入max域中,然后和上面一样,得到最大最小就好了。循环终止条件是,while(i小于j)
**这里要注意一点,因为同时要得到max和min,因此选择的两个数a[min] 和 a[max] 也要参与比较,(选出最大时,a[min]要参加比较; 选出最小时,a[max]要参加比较)**
4>二分归并排序mergeSort(效率最高的)
public static void mergeSort(int[] a,int first,int last,int[] temp){ if(first<last){ int mid=(first+last)/2; mergeSort(a, first, mid, temp); mergeSort(a,mid+1,last,temp); mergeArray(a,first,mid,last,temp); } } private static void mergeArray(int[] a, int first, int mid, int last, int[] temp) { // TODO Auto-generated method stub int i=first,j=mid+1; int m=mid,n=last; int k=0; while(i<=m && j<=n){ if(a[i]<=a[j]) temp[k++]=a[i++]; else temp[k++]=a[j++]; } while(i<=m) temp[k++]=a[i++]; while(j<=n) temp[k++]=a[j++]; for(i=0;i<k;i++){ a[first+i]=temp[i]; } }
0 0
- 排序算法的总结
- 排序算法的总结
- 排序算法的总结
- 排序算法的总结
- 排序算法的总结
- 排序算法的总结
- 排序算法的总结
- 一些排序算法的总结
- 排序算法的分类总结
- 简单排序算法的总结
- 排序算法的一些总结
- 整理的排序算法总结
- 排序算法的简单总结
- 排序算法的分析总结
- 各种排序算法的总结
- 各种排序算法的总结
- 各类排序算法的总结
- 常见的排序算法总结
- 圆的面积
- hibernate—级联保存更新
- 程序运行过程中出现奔溃
- 使用filezilla上传文件或者项目
- 算法设计Week5 LeetCode Algorithms Problem #122 Best Time to Buy and Sell Stock II
- 排序算法的总结
- RabbitMQ搭建与例子
- 离散余弦变换的性质
- 6. ZigZag Conversion
- Python爬虫(1)——基于BeautifulSoup爬取豆瓣电影信息
- mongodb的java驱动的简单使用
- Maven+Hibernate+JPA+Postgresql基础配置
- async的使用
- 续二,用RecyclerView来实现苹果后台样式的卡片布局