常用排序算法
面试中经常会被问到或现场写:冒泡、快速
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xijuymfi-1572518139936)(img\1.png)]
(1)冒泡排序 Bubble Sort
public void bubbleSort(int[] arr
){
for(int i
= 0;i
<arr
.length
;i
++){
for(int j
= 0;j
<arr
.length
-i
-1;j
++){
if(arr
[j
] > arr
[j
+1]){
int temp
;
temp
= arr
[j
];
arr
[j
] = arr
[j
+1];
arr
[j
+1] = temp
;
}
}
System
.out
.print(arr
[i
] + ",");
}
}
(2)插入排序 Insert Sort
public static void insertSort(int[] arr
){
int length
=arr
.length
;
int j
;
int i
;
int key
;
for(j
=1;j
<length
;j
++){
key
=arr
[j
];
i
=j
-1;
while(i
>=0 && arr
[i
]>key
){
arr
[i
+1]=arr
[i
];
i
--;
}
arr
[i
+1]=key
;
}
}
(3)选择排序 Select Sort
public static void selectSort(int[] arr
) {
for (int i
= 0; i
< arr
.length
; i
++) {
int min
= i
; / 将当前下标定义为最小值下标
for (int j
= i
+ 1; j
< arr
.length
; j
++) {
if (arr
[min
] > arr
[j
]) {
min
= j
;
}
}
if (i
!= min
) {
int tmp
= arr
[min
];
arr
[min
] = arr
[i
];
arr
[i
] = tmp
;
}
}
}
(4)归并排序 Merge Sort
public static void merge(int[] arr
, int s
, int m
, int t
) {
int[] tmp
= new int[t
- s
+ 1];
int i
= s
, j
= m
, k
= 0;
while (i
< m
&& j
<= t
) {
if (arr
[i
] <= arr
[j
]) {
tmp
[k
] = arr
[i
];
k
++;
i
++;
} else {
tmp
[k
] = arr
[j
];
j
++;
k
++;
}
}
while (i
< m
) {
tmp
[k
] = arr
[i
];
i
++;
k
++;
}
while (j
<= t
) {
tmp
[k
] = arr
[j
];
j
++;
k
++;
}
System
.arraycopy(tmp
, 0, arr
, s
, tmp
.length
);
}
(5)快速排序 Quick Sort
public static int getMiddle(int[] arr
,int low
,int high
){
int temp
= arr
[low
];
while(low
<high
){
while(low
<high
&& arr
[high
] > temp
){
high
--;
}
arr
[low
] = arr
[high
];
while(low
<high
&& arr
[low
] <=temp
){
low
++;
}
arr
[high
] = arr
[low
];
}
arr
[low
] = temp
;
return low
;
}
public static void quickSort(int[] arr
,int low
, int high
){
if(low
<high
){
int middle
= getMiddle(arr
, low
, high
);
System
.out
.println("middle = " + middle
);
quickSort(arr
,low
,middle
-1);
quickSort(arr
,middle
+ 1,high
);
}
}
public static void quick(int[] arr
){
if(arr
.length
>=2)
quickSort(arr
, 0, arr
.length
-1);
}
int[] a
={}
int[] a
={65}
int[] a
={65,76}
}
//再次封装,对外调用 12,14 public static void quick(int[] arr){ if(arr.length >=2) quickSort(arr, 0, arr.length -1);// 0,9 }
int[] a ={} int[] a ={65} int[] a ={65,76}