冒泡排序 java
冒泡排序理论:
1.也是分为有序区和无序区,有序区是每一趟产生一个,在结尾处
2.两两(i和i+1)之间进行比较,把大的内容交换到i+1位置处
3.也是需要进行n-1躺
4.需要比较n次,并且需要n躺,所以时间复杂度也是n^2
java代码:
package lianxi;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
class SelectionSort{
private final int SIZE = 10; // 定义排序序列的长度。调试阶段可以把这个值调小以方便调试。
private final int MAX = 10; //定义排序序列的最大值
public static void main(String[] args){//主函数入口 选择排序
SelectionSort ss = new SelectionSort(); //创建对象
List<Integer> data = ss.dataGenerator();
// 把数字打印出来可以帮助调试程序
System.out.print(" 未排序前: ");
ss.print(data);
ss.sort(data);
System.out.print(" 排序后: ");
ss.print(data);
if(ss.test(data)){
System.out.println(" 排序成功 !");
}
else{
System.out.println(" 排序不成功 !");
}
}
/*
数据生成函数
*/
public List<Integer> dataGenerator(){
List<Integer> data = new ArrayList<Integer>();
Random generator = new Random(System.currentTimeMillis());//获取系统时间
for(int i = 0; i < SIZE; i++){
data.add(generator.nextInt(MAX));//长度小于我们设置的长度时往data数组中添加数据
}
return data;
}
/*
测试排序结果是否正确
*/
public boolean test(List<Integer> nums){
for(int i = 0 ; i < SIZE - 1; i++){//检查i和i+1是否递增
if(nums.get(i) > nums.get(i+1)){
return false;
}
}
return true;
}
/*
打印排序的序列
*/
public void print(List<Integer> nums){
System.out.println(" ");
for(int i = 0; i < SIZE; i++){
System.out.print(nums.get(i)+ " ");//根据数组下标分别空一格输出内容
}
System.out.println(" ");
}
/*
冒泡排序的实现
*/
public List<Integer> sort(List<Integer> nums){
for(int j=1;j<SIZE-1;j++){ //控制冒泡所需的躺数
for(int i=0;i<SIZE-1;i++){ //控制交换的次数
int jiaohuan;
if(nums.get(i)>nums.get(i+1)){ //交换内容
jiaohuan = nums.get(i);
nums.set(i,nums.get(i+1));
nums.set(i+1,jiaohuan);
}
}
}
return nums;
}
}