1:冒泡排序
把最小的数据一个个往上冒,然后进行比较,排序。
package CH02;
public class BubbleSort {
//一个静态方法,里面传入一个long的数组
public static void sort(long[] array){
//首先声明一个临时变量
long temp =0;
// 思考如何排序呢?首先是一个循环,i表示这是第几趟
//i=0,意思是数组第一个的值
for (int i = 0; i < array.length-1; i++) {
//里面的循环是比较,j是从最后开始的
//j=array.length-1意思是数组最后一个数
for (int j =array.length-1; j >i; j--) {
//里面进行比较
if(array[j]<array[j-1])//如果后面的数据小于前面的数据
{
//就把2个进行交换
temp =array[j];//临时储存
array[j]=array[j-1];
array[j-1]=temp;
}
}
}
}
public static void main(String[] args) {
}
}
测试代码
package CH02;
public class Test {
public static void main(String[] args) {
long[] array = new long[5];
array[0]=12;
array[1]=90;
array[2]=24;
array[3]=29;
//用for循环
for (long num :array) {
System.out.print(num +" ");
}
//接着对她进行排序
BubbleSort.sort(array);
System.out.println("排序后的数组");
//用for循环
for (long num :array) {
System.out.print(num +" ");
}
}
}
2:选择排序
选择排序多出了K,K总是记下最小的值
package CH02;
public class SelectSort {
public static void sort(long[] arr){
//首先定义一个K,默认她为0
int k= 0;
//临时变量
long temp=0;
//外面的循环指向多少趟
for (int i = 0; i < arr.length-1; i++) {
//在里面K=i的
k=i;//k指向的每次循环的最开始的位置,比如第二趟指向的是1
for (int j = i; j < arr.length; j++) {
if(arr[j]<arr[k]){
k=j;//因为k是最小的值,意思是说,指向比k还小的,就让k等于这个更小的值
}
}
//选择到了最小的数据了以后呢,我就把k的值和最开始的数据交换
temp =arr[i];//先存起来
arr[i]=arr[k];//这里如果是arr[k]=arr[i]的话就无法进行排序
arr[k]=temp;
}
}
}
测试代码
package ch02;
public class TestSort {
public static void main(String[] args) {
long[] arr = new long[5];
arr[0] = 34;
arr[1] = 23;
arr[2] = 2;
arr[3] = 1;
arr[4] = -4;
System.out.print("[");
for(long num : arr) {
System.out.print(num + " ");
}
System.out.print("]");
System.out.println();
InsertSort.sort(arr);
System.out.print("[");
for(long num : arr) {
System.out.print(num + " ");
}
System.out.print("]");
System.out.println();
}
}
3:插入排序
思想:
j它是从第二数开始,然后第二数和第一个数比较,
package CH02;
public class InsertSort {
public static void sort(long[] arr){
long temp=0;
//因为是从第二个数开始,所以i=1
for (int i = 1; i < arr.length; i++) {
temp=arr[i];//temp的初始值等于i
int j=i;
while(j > 0 && arr[j]>=temp){
//如果arr[j]>=temp,全部都进行右移
arr[j]=arr[j-1];
// 右移的时候,j进行--
j--;
}
//最后整个右移完成以后,j所对应的位置为就是我的插入点
arr[j]=temp;
}
}
}
测试代码
package CH02;
public class Test {
public static void main(String[] args) {
long[] arr= new long[5];
arr[0]=34;
arr[1]=23;
arr[2]=2;
arr[3]=1;
arr[4]=-4;
//用for循环
for (long num2 :arr) {
System.out.print(num2 +" ");
}
//接着对她进行排序
InsertSort.sort(arr);
System.out.println("排序后的数组");
//用for循环
for (long num :arr) {
System.out.print(num +" ");
}
}
}