java实现的排序算法笔记,待完善
冒泡排序
import java.util.ArrayList;
import java.util.List;
public class MyTest {
public static void main(String[] args) {
int[] a = new int[]{1,2,3,4,5,7,6,8,9,0};
//冒泡排序
for(int m=0;m<a.length-1;m++) {
for (int i = 0; i < a.length - 1; i++) {
if (a[i] > a[i + 1]) {
int t = a[i];
a[i] = a[i + 1];
a[i + 1] = t;
}
}
}
for (int j = 0;j<a.length;j++){
System.out.println(a[j]);
}
}
}
快速排序
import java.util.ArrayList;
import java.util.List;
public class MyTest2 {
public static void fenge(int[] a, int left, int right){
//8.当传入的数组值只有一个的时候,直接结束
if(left>right){
return;
}
//1.确定基准i,通常为数组第0个数
int i = a[left];
int m,n;
m=left;
n=right;
//2.分别从两边开始向中间遍历下标
while (m<n){
//3.从右往左,确定第一个比基准小的值的下标
while (a[n]>=i && m<n){
n--;
}
//4.从左往右,确定第一个比基准大的值的下标
while (a[m]<=i && m<n){
m++;
}
//5.如果这两个下标左小右大,则交换两个位置的值
if (m<n){
int t = a[m];
a[m] = a[n];
a[n] = t;
}
}
//6.当m和n相等时(即指向同一个数的位置时),交换基准和这个数的位置
a[left]=a[m];
a[m]=i;
//7.分组继续执行此方法
fenge(a,left,n-1);
fenge(a,n+1,right);
}
public static void main(String[] args) {
int[] a = {1,2,3,4,5,7,6,8,9,0};
fenge(a,0,a.length-1);
for (int j = 0;j<a.length;j++){
System.out.println(a[j]);
}
}
}
插入排序
public class MyTest3 {
public static void charu(int[] a){
for(int i=1;i<a.length;i++){
for (int j=i;j>0;j--){
if(a[j]<a[j-1]){
int t=a[j];
a[j]=a[j-1];
a[j-1]=t;
}
}
}
}
public static void main(String[] args) {
int[] a = new int[]{1,2,3,4,5,7,6,8,9,0};
charu(a);
for (int i=0;i<a.length;i++){
System.out.println(a[i]);
}
}
}
希尔排序
import java.util.Arrays;
public class MyTest4 {
public static void xier(int[] a){
int temp=a.length;//定义temp为数组的长度,即数的个数
for (int i=temp/2;i>0;i/=2){//定义一个i作为间隔,一般为数组长度的一半,每次减半
for (int j=i;j<temp;j++){//从间隔开始取右边的数,下标定义为k
for (int k=j;k>=i && a[k]<a[k-i];k-=i){//右边的数(满足k>=i)与左边的数比较,直到左大右小(a[k]<a[k-i]),就交换位置,(k-=i)使不满足(k>=i)
int t=a[k];
a[k]=a[k-i];
a[k-i]=t;
}
}
}
}
public static void main(String[] args) {
int[] a = new int[]{1,2,3,4,5,7,6,8,9,0};
xier(a);
System.out.println(Arrays.toString(a));
}
}