1、冒泡算法 这个算法代码比较简单,它的核心是做第i轮排序就会把第i大的值放到后面,比如第一轮将最大的值放到最后,第二轮将第二大的值放到倒数第二。时间度复杂度为O(n的平方),空间复杂度为O(1),可以进行的优化是在第一个for循环时声明一个布尔值变量用来判断是否在第二个for循环中进行了交换变值,如果没有就认为此时的序列已经是有序的。
2、选择排序 这个算法是先定一个k 再用j往后找到比k小的 将此时的j变为k,再用j往后。依次做此操作,最后将k放到此躺排序的前面。 就是只记号,到最后才去比较第i个和第k个 核心思想:只记位置,减少交换次数。 时间复杂度为O(n的平方),空间复杂度为O(1)。
3、插入排序 这个算法很有意思 就跟我们打牌的时候一样,抓一张插一张,认为手里的是有序的。后来的排往里面插,从后往前依次找。先弄一个变量 拿到手上与前面有序的去比较。优化:二分优化 先拿中间的去比 一次去一半
具体代码如下:
<span style="font-size:18px;">package cn.hncu.sorts;
public class sortWays {
public static void main(String[] args) {
int[] a={21,22,5,7,86,57,9,-2,37,-8};
// bubbleSort(a);//冒泡排序
// bubbleSort2(a);//优化冒泡排序
// selectSort(a);
insertSort(a);
print(a);//输出函数
}
//选择插入排序 从后面往前面依次找 先弄一个变量拿到手上,与前面的去比。如果比前面的小,就往前面插,不然就直接放到后面 即a[j+1]=temp。
private static void insertSort(int[] a) {
for(int i=0;i<a.length-1;i++){
int temp=a[i+1];
int j=i;
while(a[j]>temp){
a[j+1]=a[j];
j--;
if(j<0){
break;
}
}
a[j+1]=temp;
}
}
//选择排序
private static void selectSort(int[] a) {
for(int i=0;i<a.length-1;i++){
int k=i;
for(int j=i+1;j<a.length;j++){
if(a[k]>a[j]){
k=j;
}
}
if(k!=i){
swap(a, i, k);
}
}
}
//输出函数
private static void print(int[] a) {
for(int num:a){
System.out.print(num+" ");
}
System.out.println();
}
//1-1冒泡排序函数
private static void bubbleSort(int[] a) {
for(int i=0;i<a.length-1;i++){
for(int j=0;j<a.length-1-i;j++){
if(a[j]>a[j+1]){
swap(a,j,j+1);//交换数组位置
}
}
}
}
//1-2优化冒泡排序函数
private static void bubbleSort2(int[] a) {
for(int i=0;i<a.length-1;i++){
boolean flag=true;
for(int j=0;j<a.length-1-i;j++){
if(a[j]>a[j+1]){
flag=false;
swap(a,j,j+1);//交换数组位置
}
}
if(flag){
break;
}
}
}
//交换数组位置函数
private static void swap(int[] a, int j, int i) {
int temp;
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
</span>