冒泡排序的结束条件是什么
解决方案 »
- 请问怎么让java程序在后台运行
- 返回泛型
- 一个高手说 禁用客户端的COOKIE 客户端禁用COOKIE 不一样不知道有人知道这是什么意思有什么区别吗?
- JAVA JFileChooser 获取的路径存入文件中 再用这个路径读取文件内容
- 请教:求一个简单聊天工具的JAVA源代码
- 求救!关于jasperreport中加载已编译报表的问题!
- 关于服务器和客户端之间数据传输的问题
- 几个小问题
- 请问java里面有没有按照特定格式切割字串的方法??在线等待
- 我应聘的公司要我等,全文如下,可其他公司也要我面试呢,真的是烦死了?
- 求救,java运行不了
- 使用HttpURLConnection 连接webService时,得到的内容中“<”变成了“<”中文变成误
{
public static void main(String[] args) {
int[] a = {1,4,6,3,8,9};
for(int i = 4;i < 3;i++) {
System.out.println(a[4]);
}
}
}
这个程序为什么不是输出8这个答案
public static void bubbleSort(int[] a)
{
for (int i = a.length-1; i > 0; i--)
{
boolean isOrdered = true;//是否已经有序
for (int j = 0; j < i; j++)
{
if (a[j] > a[j+1])//左边的数大于右边的数,交换
{
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
isOrdered = false;//有交换,还不是有序
}
}
if (isOrdered)//说明一次交换都没有发生,已经有序
{
return;//排序结束
}
}
}
//结束条件:第i次循环没有数据交换
class BubbleDemo
{
public static void main(String [] args)
{
int [] a={6,5,4,3,2,1,7,8};
for(int i=0;i<a.length;i++)
{
boolean flag=false; //flag用于标记第i次循环是否存在数据交换
for(int j=0;j<a.length-1-i;j++)
{
if(a[j]>a[j+1])
{
flag=true;
int temp=0;
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
if(!flag) //若第i次循环没有交换数据,则表示数组数据已经按从小到大排列好,不需再继续向下执行
break;
}
for(int i=0;i<a.length;i++)
{
System.out.print(a[i]+" ");
}
}
}
for(int i = a.length;i>0;i--) {
for(int j = 0;j<i-1;j++) {
if(a[j]>a[j+1]) {
int test = a[j];
a[j] = a[j+1];
a[j+1] = test;
}
}
}
for(int i:a)
System.out.print(i+" ");
for(int i = a.length;i>0;i--) {
for(int j = 0;j<i-1;j++) {
if(a[j]>a[j+1]) {
int test = a[j];
a[j] = a[j+1];
a[j+1] = test;
}
}
}
for(int i:a)
System.out.print(i+" ");
* 冒泡排序----交换排序的一种
* 方法:相邻两元素进行比较,如有需要则进行交换,每完成一次循环就将最大元素排在最后(如从小到大排序),下一次循环是将其他的数进行类似操作。
* 性能:比较次数O(n^2),n^2/2;交换次数O(n^2),n^2/4
*
* @param data 要排序的数组
* @param sortType 排序类型
* @return
*/
public void bubbleSort(int[] data, String sortType) {
if (sortType.equals("asc")) { //正排序,从小排到大
//比较的轮数
for (int i = 1; i < data.length; i++) {
//将相邻两个数进行比较,较大的数往后冒泡
for (int j = 0; j < data.length - i; j++) {
if (data[j] > data[j + 1]) {
//交换相邻两个数
swap(data, j, j + 1);
}
}
}
} else if (sortType.equals("desc")) { //倒排序,从大排到小
//比较的轮数
for (int i = 1; i < data.length; i++) {
//将相邻两个数进行比较,较大的数往后冒泡
for (int j = 0; j < data.length - i; j++) {
if (data[j] < data[j + 1]) {
//交换相邻两个数
swap(data, j, j + 1);
}
}
}
} else {
System.out.println("您输入的排序类型错误!");
}
printArray(data);//输出冒泡排序后的数组值
}