简单的用代码实现常见的排序算法。。。
(1)冒泡排序
package sort;
/*
* 冒泡排序 O(n²)
* 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
* 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
* 针对所有的元素重复以上的步骤,除了最后一个。
* 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
* @param arr 需要排序的整型数组
*/
public class bubbleSort {
public void bubbleSort() {
int[] arr = {13,8,6,11,5,9,4};
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-i-1;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+" ");
}
}
public static void main(String[] args) {
bubbleSort mp = new bubbleSort();
mp.bubbleSort();
}
}
(2)插入排序
package sort;
/**
* 插入排序 O(n²)
* 从第一个元素开始,该元素可以认为已经被排序
* 取出下一个元素,在已经排序的元素序列中从后向前扫描
* 如果该元素(已排序)大于新元素,将该元素移到下一位置
* 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
* 将新元素插入到该位置中
* 重复步骤2
*/
public class insertSort {
public static void main(String[] args) {
int[] arr = {13,6,5,17,2,26};
System.out.println("排序前:");
for(int num:arr) {
System.out.print(num+" ");
}
for(int i=0;i<arr.length;i++) {
for(int j=i;j>0;j--) {
if(arr[j]<arr[j-1]) {
int temp = arr[j-1];
arr[j-1] = arr[j];
arr[j] = temp;
}
}
}
System.out.println();
System.out.println("排序后:");
for(int num:arr) {
System.out.print(num+" ");
}
}
}
(3)快速排序
package sort;
/*
* 快速排序:O(nlog2n)
* 通过一趟排序将待排序记录分割成独立的两部分
* 其中一部分记录的关键字均比另一部分关键字小
* 分别对这两部分继续进行排序
* 直到整个序列有序
*/
public class quickSort {
private void swap(int[] arr,int i,int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
int partition(int[] arr,int l,int r) {
int p = arr[r];
//将小于p的元素移到左边
//将大于p的元素移到右边
int index = 1;
for(int i=index;i<r;++i) {
if(arr[i]<p) {
swap(arr,index++,i);
}
}
swap(arr,index,r);
return index;
}
public void sort(int[] arr,int l,int r) {
if(l<r) {
int q = partition(arr,l,r);
//对左边进行排序
sort(arr,l,q-1);
//对右边进行排序
sort(arr,q+1,r);
}
}
}
class demo {
public static void main(String[] args) {
int[] arr = {11,5,7,12,9,4,3};
quickSort qs = new quickSort();
qs.sort(arr, 0, arr.length-1);
for(int i=0;i<arr.length;i++) {
System.out.println(arr[i]+" ");
}
}
}
(4)选择排序
package sort;
/**
* 选择排序算法 O(n²)
* 在未排序序列中找到最小元素,存放到排序序列的起始位置
* 再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾。
* 以此类推,直到所有元素均排序完毕。
*/
public class selectSort {
public static void main(String[] args) {
int[] arr = {1,23,4,2,11,65};
System.out.println("交换之前:");
for(int num:arr) {
System.out.print(num+" ");
}
//选择排序优化
for(int i=0;i<arr.length-1;i++) {
int k = i;
for(int j=k+1;j<arr.length;j++) { //选择最小的记录下来
if(arr[j]<arr[k]) {
k = j; //记下目前最小值的位置
}
}
//在内层循环结束,找到最小值之后,再进行交换
if(i!=k) {
int temp = arr[i];
arr[i] = arr[k];
arr[k] = temp;
}
}
System.out.println();
System.out.println("交换后:");
for(int num:arr) {
System.out.print(num+" ");
}
}
}