1.1冒泡排序
原理:比较两个相邻的元素,将值大的元素交换至右端。
思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复第一趟步骤,直至全部排序完成。
代码:
public static void main(String[] args) {
int[] arr={6,3,8,2,9,1};
System.out.println("排序前数组为:");
for(int num:arr){
System.out.print(num+" ");
}
for(int i=0;i<arr.length-1;i++){//外层循环控制排序趟数
for(int j=0;j<arr.length-1-i;j++){//内层循环控制每一趟排序多少次
if(arr[j]>arr[j+1]){
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
System.out.println();
System.out.println("排序后的数组为:");
for(int num:arr){
System.out.print(num+" ");
}
}
冒泡排序就是一个双层循环, 外层循环控制排序趟数,内层循环控制每一趟排序多少次
for(int i=0;i<arr.length-1;i++){//外层循环控制排序趟数
for(int j=0;j<arr.length-1-i;j++){//内层循环控制每一趟排序多少次
1.2快速排序
原理:
快速排序思路是使数组中的每个元素与基准值(左边第一个值)比较,数组中比基准值小的放在基准值的左边;大的放在右边;接下来将左部和右部分别递归地执行上面的过程:选基准值,小的放在左边,大的放在右边。。。直到排序结束。
注意:
当你定义最左边为基准值时 就要右边的数值先动 反之亦然
参考 7 5 6 8 9 (即7 处于左边最后要和一个比他的小的数交换回来 而这个比他小的数一定来自他的右边)
变量声明代码:
static Integer[] integer;
static Scanner sc;
主方法:
public static void main(String[] args) {
integer=new Integer[10];
System.out.println("生成随机数组......");
for(int i=0;i<10;i++){
integer[i]=(int)(Math.random()*100);
}
for (int i:integer) {
System.out.print(i+" ");
}
System.out.println();
System.out.println("*************************************************");
System.out.println("排序......");
quicksort(0,9);
for (int i:integer) {
System.out.print(i+" ");
}
}
快排的方法代码:
public static void quicksort(int left,int right){//快排实现过程
// 递归出口
if(left>right)
return;
// 先把这几个数据储存起来就不会丢失了 因为一会要做运算
int temp = integer[left], m = left, n = right;
// 排除递归最后一次相当时的运算
while (m != n) {
while (integer[n] >= temp && m < n)
n--;//找到右边比第一个数小的坐标 和第一个数交换
integer[m] = integer[n];
while (integer[m] <= temp && m < n)
m++;//找到左边比第一个数大的坐标 和刚才的小数交换
integer[n] = integer[m];
}
integer[m] = temp;//第一个数的归中(最后把之前存好的第一个数的值赋给中间的数)
//左半部分的递归调用
quicksort(left, m-1);
//右半部分的递归调用
quicksort(m+1,right);
}
运行结果:
生成随机数组......
16 16 46 30 30 13 45 25 61 95
*************************************************
排序......
13 16 16 25 30 30 45 46 61 95
Process finished with exit code 0