搞懂三大排序就入门了Java循环和数组的使用
冒泡排序
冒泡排序的原理
不断的让前一个(i)和后一个(i+1)作比较 然后将大的值赋给i+1,这样每一轮都会有一个像气泡一样的数被放到数组的最后面,第一轮重复arr.length-1次(拿第一个和后面length-1个作比较),后面每一轮都会有一个数被冒泡排序到最后这样就形成了有序数组。
冒泡排序实现
public class HelloBubble {
public static void main(String[] args) {
//定义一个数组
int [] arr = {1,33,5,22,13,3};
//第一重循环决定要排序的轮数
for (int i = 0; i <= arr.length - 1; i++) {
//第二重循环冒一个最大的数出来排到数组的最后面
for (int j = 0; j < arr.length - i - 1; j++) {
if (arr[j]>arr[j+1]){
//使用中间值x进行元素的替换
int x ;
x = arr[j];
arr[j] = arr[j+1];
arr[j+1] =x;
}
}
}
//增强for循环遍历输出数组
for (int a:arr){
System.out.print(a+" ");
}
}
}
选择排序
选择排序原理
每一轮都从数组中拿第i个数出来然后让其与数组中的每一个元素作比较,如果有比它小的数就将这个数的下标记下,然后将i这个下标的数与之前记下下标的元素的值进行交换,这样第一轮下来便将数组中最小的一个数放在了第一,第二轮还是选择第i个数(此时的i为数组中的第二个数)
选择排序的实现
public class HelloMin {
public static void main(String[] args) {
hellMin();
}
private static void hellMin() {
//定义一个数组
int [] arr = {1,3,4,52,3,53,21,4};
//第一重循环决定要排序的轮次
for (int i = 0; i < arr.length - 1; i++) {
//假设第一个值是最小值下标
int minindex = i;
//使用循环找到真实的最小值下标
for (int j = i+1; j<=arr.length-1 ; j++) {
if (arr[minindex]>arr[j]){
minindex = j;
}
}
//中间变量换值法 数组中第一个数换为最小值的值。
int x =0;
x = arr[i];
arr[i] = arr[minindex];
arr[minindex] =x;
}
//增强for循环输出排序完成的数组
for(int a:arr){
System.out.print(a+" ");
}
}
}
快速排序
快速排序的原理
将数组中的第一个数拿出,然后从数组的右边向左边找第一个小于拿出的这个数的数,将这个数的下标改成第一个数的下标,此时从数组的左边向右边寻找第一个比拿出来的这个数大的数,将它的下标改成刚才被填到拿出来的那个数的位置,这样经过很多轮以后,这个数组变成了左边都比第一次拿出来的数小的数,数组的右边变成了都比第一次拿出来大的数,然后将第一次拿出来的数填到中间,此时这个数组被从中间分成了两个新的数组,然后再对每个新数组进行以上操作(用到了方法的递归!!!)
快速排序实现
package course;
public class quick_sort {
public static void main(String[] args) {
//定义一个数组
int [] arr = {48,6,57,88,60,42,83,73,88,85};
//调用快速排序方法将 数组 ,开始 , 结束 三个参数传入
quickly_sort(arr,0,arr.length-1);
//使用增强for循环查看快速排序后的数组的顺序
for(int a:arr){
System.out.print(a+" ");
}
}
private static void quickly_sort(int s[],int l,int r) {
if(l<r){
int i = l, j = r,x = s[l];
while(i<j){
while(i<j && s[j] >= x)//从右向左找第一个小于x的数
j--;
if(i<j)
s[i++] = s[j];
while(i < j && s[i] < x)//从左向右找第一个大于等于x的数
i++;
if(i < j)
s[j--] = s[i];
}
s[i] =x;
//方法递归
quickly_sort(s,l,i-1);
quickly_sort(s,i+1,r);
}
}
}