java冒泡排序(Bubble Sort)是一种计算机科学领域的较简单的排序算法。
基本介绍
- 中文名:冒泡排序
基本介绍
它重複地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重複地进行直到没有再需要交换,也就是说该数列已经排序完成。
这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。
Java冒泡排序是使用Java语言实现冒泡排序。
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重複以上的步骤,除了最后一个。
持续每次对越来越少的元素重複上面的步骤,直到没有任何一对数字需要比较。
算法原理
冒泡排序算法的运作如下:(从后往前)
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重複以上的步骤,除了最后一个。
持续每次对越来越少的元素重複上面的步骤,直到没有任何一对数字需要比较。
算法分析
时间複杂度
若档案的初始状态是正序的,一趟扫描即可完成排序。所需的关键字比较次数和记录移动次数均达到最小值:所以,冒泡排序最好的时间複杂度为。若初始档案是反序的,需要进趟排序。每趟排序要进行
次关键字的比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置。在这种情况下,比较和移动次数均达到最大值:
冒泡排序的最坏时间複杂度为。
综上,因此冒泡排序总的平均时间複杂度为。
代码举例
排序,在命令行接受用户输入的N个数字,以-1作为结束标誌,并且-1不计算在内,对这些输入的数字进行排序输出,并计算平均数.要求自己写排序算法,不用汉字,拼音做类名,注释等等排序算法,不用汉字,拼音做类名,注释等等import java.io.*;
public class main{
public static void main(String ARGs[]) throws IOException
{
int num[] = new int;
int i = 0;
int temp = 0;
int sum = 0;
BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
while(true)
{
temp = Integer.parseInt(buf.readLine());
if(temp != -1)
{
num[i] = temp;
i++;
sum += temp;
}
else
{
break;
}
}
System.out.println("平均数:" + (sum / (i - 1)));
PoPo popo = new PoPo(num, i);
popo.sort();
}
}java.io.*;
public class main{
public static void main(StringARGs[]) throws IOException
{
int num[] = new int;
int i = 0;
int temp = 0;
int sum = 0;
BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
while(true)
{
temp = Integer.parseInt(buf.readLine());
if(temp != -1)
{
num[i] = temp;
i++;
sum += temp;
}
else
{
break;
}
}
System.out.println("平均数:" + (sum / (i - 1)));
PoPo popo = new PoPo(num, i);
popo.sort();
}
}public class PoPo{
int num[] = new int;
int flag = 0;
int length = 0;
public PoPo()
{
}
public PoPo(int[] Num, int i)
{
for(int j = 0; j < i; j++)
{
this.num[j] = Num[j];
}
length = i;
}public void sort()
{
int i = 0;
int j = 0;
int temp = 0;
for(i = 0; i < length; i++)
{
for(j = i; j < length - 1; j++)
{
if(num[i] > num[j + 1])
{
temp = num[j + 1];
num[j + 1] = num[i];
num[i] = temp;
}
}
}
System.out.print("after sort:");
for(i = 0 ; i < length; i++)
System.out.print(num[i] + " ");
System.out.println("");
}
}
先编译PoPo.java,在编译main.java
执行主程式时,输入一个数字敲个回车,输入-1时结束。
第2种情况:public class Sort{
public static void sort(String arg)
{
String[] args=arg.split(",");
for(int i=0;i<args.length;i++)
{
for(int j=0;j<args.length-i-1;j++)
{
int a=Integer.parseInt(args[j]);
int b=Integer.parseInt(args[j+1]);
if(a>b)
{
a=a^b;
b=a^b;
a=a^b;
}
args[j]=String.valueOf(a);
args[j+1]=String.valueOf(b);
}
}
for(int i=0;i<9;i++)
{
System.out.print(args[i]+",");
}
}
public static void main(String[] args)
{
sort("2,10,3,50,78,22,34,30,65");
}
}
第3种情况:public class Sort{
public static void main(String args[])
{
int[] m =
{ 2, 8, 43, 3, 33 };
int[] n = sort(m);
for (int i = 0; i < m.length; i++)
{
System.out.println(n[i] + "\n");
}
}/* 冒泡排序算法 */
public static int[] sort(int[] m)
{
int intLenth = m.length;
/*执行intLenth次*/
for (int i = 0; i < intLenth; i++)
{
/*每执行一次,将最da的数排在后面*/
for (int j = 0; j < intLenth - i - 1; j++)
{
int a = m[j];
int b = m[j + 1];
if (a > b)
{
m[j] = b;
m[j + 1] = a;
}
}
}
return m;
}
}
public class main{
public static void main(String ARGs[]) throws IOException
{
int num[] = new int;
int i = 0;
int temp = 0;
int sum = 0;
BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
while(true)
{
temp = Integer.parseInt(buf.readLine());
if(temp != -1)
{
num[i] = temp;
i++;
sum += temp;
}
else
{
break;
}
}
System.out.println("平均数:" + (sum / (i - 1)));
PoPo popo = new PoPo(num, i);
popo.sort();
}
}java.io.*;
public class main{
public static void main(StringARGs[]) throws IOException
{
int num[] = new int;
int i = 0;
int temp = 0;
int sum = 0;
BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
while(true)
{
temp = Integer.parseInt(buf.readLine());
if(temp != -1)
{
num[i] = temp;
i++;
sum += temp;
}
else
{
break;
}
}
System.out.println("平均数:" + (sum / (i - 1)));
PoPo popo = new PoPo(num, i);
popo.sort();
}
}public class PoPo{
int num[] = new int;
int flag = 0;
int length = 0;
public PoPo()
{
}
public PoPo(int[] Num, int i)
{
for(int j = 0; j < i; j++)
{
this.num[j] = Num[j];
}
length = i;
}public void sort()
{
int i = 0;
int j = 0;
int temp = 0;
for(i = 0; i < length; i++)
{
for(j = i; j < length - 1; j++)
{
if(num[i] > num[j + 1])
{
temp = num[j + 1];
num[j + 1] = num[i];
num[i] = temp;
}
}
}
System.out.print("after sort:");
for(i = 0 ; i < length; i++)
System.out.print(num[i] + " ");
System.out.println("");
}
}
先编译PoPo.java,在编译main.java
执行主程式时,输入一个数字敲个回车,输入-1时结束。
第2种情况:public class Sort{
public static void sort(String arg)
{
String[] args=arg.split(",");
for(int i=0;i<args.length;i++)
{
for(int j=0;j<args.length-i-1;j++)
{
int a=Integer.parseInt(args[j]);
int b=Integer.parseInt(args[j+1]);
if(a>b)
{
a=a^b;
b=a^b;
a=a^b;
}
args[j]=String.valueOf(a);
args[j+1]=String.valueOf(b);
}
}
for(int i=0;i<9;i++)
{
System.out.print(args[i]+",");
}
}
public static void main(String[] args)
{
sort("2,10,3,50,78,22,34,30,65");
}
}
第3种情况:public class Sort{
public static void main(String args[])
{
int[] m =
{ 2, 8, 43, 3, 33 };
int[] n = sort(m);
for (int i = 0; i < m.length; i++)
{
System.out.println(n[i] + "\n");
}
}/* 冒泡排序算法 */
public static int[] sort(int[] m)
{
int intLenth = m.length;
/*执行intLenth次*/
for (int i = 0; i < intLenth; i++)
{
/*每执行一次,将最da的数排在后面*/
for (int j = 0; j < intLenth - i - 1; j++)
{
int a = m[j];
int b = m[j + 1];
if (a > b)
{
m[j] = b;
m[j + 1] = a;
}
}
}
return m;
}
}