java 冒泡排序及其改进
2015-08-04 14:39
399 查看
/article/9023598.html
冒泡排序经典算法:
public class HelloWorld {
staticfinal int SIZE=10;
publicstatic void bubbleSort(int[] a) {
int temp;
for (int i = 1; i < a.length; i++) {
//将相邻两个数进行比较,较大的数往后冒泡
for (int j = 0; j < a.length - i; j++) {
if (a[j] > a[j + 1]) {
//交换相邻两个数
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
System.out.print("第"+i+"步排序结果:"); //输出每步排序的结果
for(int k=0;k<a.length;k++)
{
System.out.print(" "+a[k]); // 输出
}
System.out.print("\n");
}
}
publicstatic void main(String[] args) {
int[]shuzu=new int[SIZE];
inti;
for(i=0;i<SIZE;i++)
{
shuzu[i]=(int)(100+Math.random()*(100+1)); //初始化数组
}
System.out.print("排序前的数组为:\n"); //输出排序前的数组
for(i=0;i<SIZE;i++)
{
System.out.print(shuzu[i]+"");
}
System.out.print("\n");
bubbleSort(shuzu); //排序操作
System.out.print("排序后的数组为:\n");
for(i=0;i<SIZE;i++)
{
System.out.print(shuzu[i]+""); //输出排序后的数组
}
System.out.print("\n");
}
}
存在问题:
每次必须排序n-1次,若存在i(i<n-1)就已经完成排序,则后续只会浪费操作。
改进一:
设置标记符号,退出循环。
for (int i = 1; i < a.length; i++) {
//将相邻两个数进行比较,较大的数往后冒泡
boolean h=false;
for (int j = 0; j < a.length - i; j++) {
if (a[j] > a[j + 1]) {
//交换相邻两个数
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
h=true;
}
}
if(!h)
break;
改进二:
在改进一的基础确定排序位置
int b=0;
int c=0;
for (int i = 1; i < a.length; i++) {
//将相邻两个数进行比较,较大的数往后冒泡
b=c;
for (int j = a.length-i; j>b ; j--) {
if (a[j] < a[j - 1]) {
//交换相邻两个数
temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;
c=j;
}
}
if(b==c)
break;
冒泡排序经典算法:
public class HelloWorld {
staticfinal int SIZE=10;
publicstatic void bubbleSort(int[] a) {
int temp;
for (int i = 1; i < a.length; i++) {
//将相邻两个数进行比较,较大的数往后冒泡
for (int j = 0; j < a.length - i; j++) {
if (a[j] > a[j + 1]) {
//交换相邻两个数
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
System.out.print("第"+i+"步排序结果:"); //输出每步排序的结果
for(int k=0;k<a.length;k++)
{
System.out.print(" "+a[k]); // 输出
}
System.out.print("\n");
}
}
publicstatic void main(String[] args) {
int[]shuzu=new int[SIZE];
inti;
for(i=0;i<SIZE;i++)
{
shuzu[i]=(int)(100+Math.random()*(100+1)); //初始化数组
}
System.out.print("排序前的数组为:\n"); //输出排序前的数组
for(i=0;i<SIZE;i++)
{
System.out.print(shuzu[i]+"");
}
System.out.print("\n");
bubbleSort(shuzu); //排序操作
System.out.print("排序后的数组为:\n");
for(i=0;i<SIZE;i++)
{
System.out.print(shuzu[i]+""); //输出排序后的数组
}
System.out.print("\n");
}
}
存在问题:
每次必须排序n-1次,若存在i(i<n-1)就已经完成排序,则后续只会浪费操作。
改进一:
设置标记符号,退出循环。
for (int i = 1; i < a.length; i++) {
//将相邻两个数进行比较,较大的数往后冒泡
boolean h=false;
for (int j = 0; j < a.length - i; j++) {
if (a[j] > a[j + 1]) {
//交换相邻两个数
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
h=true;
}
}
if(!h)
break;
改进二:
在改进一的基础确定排序位置
int b=0;
int c=0;
for (int i = 1; i < a.length; i++) {
//将相邻两个数进行比较,较大的数往后冒泡
b=c;
for (int j = a.length-i; j>b ; j--) {
if (a[j] < a[j - 1]) {
//交换相邻两个数
temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;
c=j;
}
}
if(b==c)
break;
相关文章推荐
- java注解
- Java集合类:Collection接口常用方法
- JAVA字符串格式化-String.format()的使用
- Spring mvc+hibernate+freemarker(开源项目)
- mac 10.10.3 jdk 添加证书 cacerts文件路径
- java 计算一个月有多少天和多少周
- java中二叉排序树模型的建立
- struts2不能进入action
- 安装JDK出现问题 Error opening registry key'software\Javasoft\Java Runtime Environment'
- JAVAweb 学习总结
- springMVC学习笔记---修改配置文件路径和传递数据
- java虚拟机(一)——内存管理机制与OOM异常
- maven搭建struts2
- java注解简介
- Java NIO系列教程(七) DatagramChannel
- Java NIO系列教程(六) ServerSocketChannel
- Java NIO系列教程(五) SocketChannel
- eclipse生成jar包
- Think in java 笔记二(第3~4章)
- Eclipse找不到Courier New字体的解决方法