经常撕逼的一个问题,一个程序员联冒泡排序都写不出来....说实话,不经常用真有可能写不出来,这两个for循环很容易弄错,只能说明的就是实现原理。
注:看结果更好理解程序。。。
冒泡排序
package sort;
/**
* 冒泡排序
* @author mercy
* 前一个和后一个比较找出最大值,再依次找找除了最大值的下一个最大值。
*/
public class BubbleSort {
public static void sort(int arr[]) {
for (int i = 1; i < arr.length; i++){
for (int j = 0; j < arr.length-i; j++) { //比的次数随着i的值越大次数越少
if (arr[j] > arr[j + 1]) //值大的往后放,否则值小的往后放
int temp;
temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
for (int m = 0; m < arr.length; m++) {
System.out.print(arr[m] + " ");
}
System.out.println(" ");
}
System.out.println("数组长度为:" + arr.length);
}
public static void main(String[] args) {
int[] arr = {5, 3, 9, 0, 6};
BubbleSort.sort(arr);
}
}
结果:
3 5 0 6 9
3 0 5 6 9
0 3 5 6 9
0 3 5 6 9
数组长度为:5
选择排序
package sort;
//选择排序 第0个和第1个第2个n个比较大小,第1个和第二个和第n个比较大小,找出最大值,依次找出剩余最大值
public class SelectSort {
public static void sort(int[] arr){
for(int i=0;i<arr.length-1;i++) {
for(int j=i+1;j<arr.length;j++)
{
if(arr[i]>arr[j])//值小的往前放,否则值大的往前放
{
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
for(int m=0;m<arr.length;m++){
System.out.print(arr[m]+" ");
}
System.out.println(" ");
}
System.out.println("数组长度为:" + arr.length);
}
public static void main(String[] args) {
int[]arr={5,3,9,0,6};
SelectSort.sort(arr);
}
}
结果:
0 5 9 3 6
0 3 9 5 6
0 3 5 9 6
0 3 5 6 9
数组长度为:5
插入排序,插入排序的原理是:每一次将要排序的数插入前面已经排完序的队列中,直到全部记录插入为止。
插入排序有三种实现,一种是直接插入,一种是折半插入,一种是希尔排序。很好理解,代码真心不好写。