数据结构与算法分析笔记与总结(java实现)--排序1:冒泡排序练习题
2017-02-15 17:04
417 查看
题目:对于一个int数组,请编写一个冒泡排序算法,对数组元素排序。
给定一个int数组A及数组的大小n,请返回排序后的数组。
测试样例:[1,2,3,5,2,3],6 输出:[1,2,2,3,3,5]
思路:冒泡排序原理很简单:遍历n次,每次遍历找出一个最大的元素放到数组的最后面,第一次遍历从0开始对相邻两个元素进行比较,将较大的元素进行交换是指位于后面的位置,即总是比较a[i]与a[i+1]两个元素,i从0开始到length-2;完成第一次排序后找出了最大的元素并将其放到了末尾;然后再次遍历i从0开始到length-3,每次比较相邻两个元素大小,将大的交换到后面,完成第二次排序后找出了倒数第二大的元素并将其放到了倒数第二个位置,依次类推,程序是一个2重循环,外层循环范围是每一次未排序的范围,从i=length-1开始到i=1;内层循环从j=0开始到j=i-1;
时间复杂度O(n^2),空间复杂度O(1),稳定。
每次循环将当前数组中的最大值移动到数组末尾的有序位置,于是每次循环之后需要排序的数组范围就会缩小一个元素。于是外层循环代表当前需要进行排列的数组范围需要不断缩小。写代码时注意边界值的界定,可以通过具体化来帮助确定。
importjava.util.*;
//冒泡排序:每次遍历将最大的元素相邻交换到数组的最后面,需要排序的数组范围逐渐减小
publicclass BubbleSort {
public int[] bubbleSort(int[] A, int n) {
//特殊输入
if(A==null||A.length<=0) return A;
int temp=0;
//双重遍历,外层遍历表示需要排序的数组范围,从i=A.length-1逐渐减小到i=0
for(int i=A.length-1;i>=0;i--){
for(int j=0;j<=i-1;j++){
if(A[j]>A[j+1]){
//交换相邻的两个元素A[j]与A[j+1],将大的向后移动
temp=A[j+1];
A[j+1]=A[j];
A[j]=temp;
}
}
}
return A;
}
}
给定一个int数组A及数组的大小n,请返回排序后的数组。
测试样例:[1,2,3,5,2,3],6 输出:[1,2,2,3,3,5]
思路:冒泡排序原理很简单:遍历n次,每次遍历找出一个最大的元素放到数组的最后面,第一次遍历从0开始对相邻两个元素进行比较,将较大的元素进行交换是指位于后面的位置,即总是比较a[i]与a[i+1]两个元素,i从0开始到length-2;完成第一次排序后找出了最大的元素并将其放到了末尾;然后再次遍历i从0开始到length-3,每次比较相邻两个元素大小,将大的交换到后面,完成第二次排序后找出了倒数第二大的元素并将其放到了倒数第二个位置,依次类推,程序是一个2重循环,外层循环范围是每一次未排序的范围,从i=length-1开始到i=1;内层循环从j=0开始到j=i-1;
时间复杂度O(n^2),空间复杂度O(1),稳定。
每次循环将当前数组中的最大值移动到数组末尾的有序位置,于是每次循环之后需要排序的数组范围就会缩小一个元素。于是外层循环代表当前需要进行排列的数组范围需要不断缩小。写代码时注意边界值的界定,可以通过具体化来帮助确定。
importjava.util.*;
//冒泡排序:每次遍历将最大的元素相邻交换到数组的最后面,需要排序的数组范围逐渐减小
publicclass BubbleSort {
public int[] bubbleSort(int[] A, int n) {
//特殊输入
if(A==null||A.length<=0) return A;
int temp=0;
//双重遍历,外层遍历表示需要排序的数组范围,从i=A.length-1逐渐减小到i=0
for(int i=A.length-1;i>=0;i--){
for(int j=0;j<=i-1;j++){
if(A[j]>A[j+1]){
//交换相邻的两个元素A[j]与A[j+1],将大的向后移动
temp=A[j+1];
A[j+1]=A[j];
A[j]=temp;
}
}
}
return A;
}
}
相关文章推荐
- 数据结构与算法分析笔记与总结(java实现)--排序8:小范围排序练习题
- 数据结构与算法分析笔记与总结(java实现)--排序11:有序矩阵查找练习题
- 数据结构与算法分析笔记与总结(java实现)--排序10:三色排序练习题
- 数据结构与算法分析笔记与总结(java实现)--排序2:选择排序练习题
- 数据结构与算法分析笔记与总结(java实现)--排序13:相邻两数最大差值练习题
- 数据结构与算法分析笔记与总结(java实现)--排序6:计数排序练习题
- 数据结构与算法分析笔记与总结(java实现)--排序7:基数排序练习题
- 数据结构与算法分析笔记与总结(java实现)--排序12:最短子数组练习题
- 数据结构与算法分析笔记与总结(java实现)--排序3:插入排序练习题
- 数据结构与算法分析笔记与总结(java实现)--排序4:归并排序练习题
- 数据结构与算法分析笔记与总结(java实现)--二叉树8:寻找错误结点练习题
- 数据结构与算法分析笔记与总结(java实现)--二叉树7:折纸练习题
- 数据结构与算法分析笔记与总结(java实现)--二叉树9:树上最远距离练习题
- 数据结构与算法分析笔记与总结(java实现)--字符串5:词语变形练习题
- 数据结构与算法分析笔记与总结(java实现)--数组9:数字在排序数组中出现的次数
- 数据结构与算法分析笔记与总结(java实现)--二叉树10:最大二叉搜索子树练习题
- 数据结构与算法分析笔记与总结(java实现)--字符串10:空格替换练习题
- 数据结构与算法分析笔记与总结(java实现)--字符串8:字符串移位练习题
- 数据结构与算法分析笔记与总结(java实现)--链表8:对排序链表删除重复结点问题
- 数据结构与算法分析笔记与总结(java实现)--字符串11:合法括号序列判断练习题