冒泡排序
- 思想:依次比较相邻的两个数,将小数放在前面,大数放在后面。
package SortTest;
import java.util.Scanner;
public class BubbleSort {
/**
* 冒泡排序(时间复杂度为O(n2))
* @param args
*/
public static void main(String[] args) {
Scanner sca=new Scanner(System.in);
int count=sca.nextInt();
int[] a=new int[count];
for(int i=0;i<count;i++){
a[i]=sca.nextInt();
}
for(int i=a.length-1;i>=1 ;i--){
for(int j=0;j<i ;j++){
if(a[j]>a[j+1]){
swp(a,j,j+1);去
}
}
}
for(int j=0;j<a.length ;j++){
System.out.print(a[j]+" ");
}
}
private static void swp(int a[],int i, int j) {
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
选择排序
- 它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法
package SortTest;
import java.util.Scanner;
public class SimpleSelectionSort {
/**
* 简单选择排序(时间复杂度为O(n2))
* @param args
*/
public static void main(String[] args) {
Scanner sca=new Scanner(System.in);
int count=sca.nextInt();
int[] a=new int[count];
for(int i=0;i<count;i++){
a[i]=sca.nextInt();
}
for(int i=0;i<a.length-1;i++){
int min=i;
for(int j=i+1;j<a.length ;j++){
if(a[min]>a[j]){
min=j;
}
}
if(i!=min){
swp(a,i,min);
}
}
for(int j=0;j<a.length ;j++){
System.out.print(a[j]+" ");
}
}
private static void swp(int a[],int i, int j) {
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
插入排序
- 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。
- 每次处理就是将无序数列的第一个元素与有序数列的元素从后往前逐个进行比较,找出插入位置,将该元素插入到有序数列的合适位置中。
package SortTest;
import java.util.Scanner;
public class InsertSort {
/**
* 插入排序(时间复杂度为O(n2))
* @param args
*/
public static void main(String[] args) {
Scanner sca = new Scanner(System.in);
int count = sca.nextInt();
int[] a = new int[count];
for (int i = 0; i < count; i++) {
a[i] = sca.nextInt();
}
for (int i = 1; i < a.length; i++) {
int temp, j;
temp=a[i];
j=i;
while(j>0&&a[j-1]>=temp){
a[j]=a[j-1];
--j;
}
a[j]=temp;
}
for (int x = 0; x < a.length; x++) {
System.out.print(a[x] + " ");
}
}
}