首先感谢同学们的留言Thanks♪(・ω・)ノ,这篇文章也是应同学的邀请,简单写一下常用的排序算法,后续还会持续更新
1.第一个–选择排序,面试的时候也是有人问过的
说白了就是遍历数组,找出最小的,交换位置
/**选择排序
*遍历数组 然后每次遍历到一个元素之后 继续遍历该元素之后的所有元素 然后找到最小的元素 和其换位置
*/
public static int[] select(int[] array){
for (int i = 0; i < array.length; i++) {
int minPos = i;
for (int j = i + 1; j < array.length; j++) {
if (array[j] < array[minPos]){
minPos = j;
}
}
if (array[i] > array[minPos]) {
int temp = array[i];
array[i] = array[minPos];
array[minPos] = temp;
}
}
return array;
}
2.第二个–插入排序,
依然是遍历,俩俩比较,两层循环全遍历一遍
/**插入排序
*相当于 从0开始一直++ 然后一直排列索引跟之前的元素
*/
public static int[] insert(int[] array) {
for (int i = 1; i < array.length; i++) {
int temp = array[i];
for (int j = i - 1; j >= 0 ; j--) {
if (array[j] > temp ) {
array[j + 1] = array[j];
array[j] = temp;
}
}
}
return array;
}
前面这两种代码层级看起来也不那么简单,也是比较常用到的
3.第三个–快速排序
顾名思义,那就是快呗,选定一个元素,把比他小的放左边,比他大的扔在右边,循环遍历
/**
* 快速排序
* 在快排中要设定分水岭 就是随机一个元素 然后比他小的放置到其左边 比其大的在有边 循环往复
*/
public static int[] quick(int[] array) {
int length = array.length - 1;
sortQuick(array, 0, length);
return array;
}
private static void sortQuick(int[] array, int low, int length) {
if (low < length) {
int div = firstRun(array, low, length);
sortQuick(array, 0, div - 1);
sortQuick(array, div + 1, length);
}
}
private static int firstRun(int[] array, int low, int length) {
int base = array[low];
while (low < length) {
while (array[length] > base) {
length--;
}
swrap(array, low, length);
while (array[low] < base) {
low++;
}
swrap(array, low, length);
}
return low;
}
private static void swrap(int[] array, int low, int length) {
int temp = array[length];
array[length] = array[low];
array[low] = temp;
//return array;
}
还有很多种排序算法,后续再补上吧
接下来说一下,有很多同学问我,在Android studio的Android项目中,怎么运行java的main方法呢
先贴上代码
private static int[] a = new int[]{1,2,345,98,209,1000,24,26789};
public static void main(String[] args) {
// select(a);
insert(a);
// quick(a);
System.out.println("OK");
}
/**选择排序
*遍历数组 然后每次遍历到一个元素之后 继续遍历该元素之后的所有元素 然后找到最小的元素 和其换位置
*/
public static int[] select(int[] array){
for (int i = 0; i < array.length; i++) {
int minPos = i;
for (int j = i + 1; j < array.length; j++) {
if (array[j] < array[minPos]){
minPos = j;
}
}
if (array[i] > array[minPos]) {
int temp = array[i];
array[i] = array[minPos];
array[minPos] = temp;
}
}
return array;
}
/**插入排序
*相当于 从0开始一直++ 然后一直排列索引跟之前的元素
*/
public static int[] insert(int[] array) {
for (int i = 1; i < array.length; i++) {
int temp = array[i];
for (int j = i - 1; j >= 0 ; j--) {
if (array[j] > temp ) {
array[j + 1] = array[j];
array[j] = temp;
}
}
}
return array;
}
/**
* 快速排序
* 在快排中要设定分水岭 就是随机一个元素 然后比他小的放置到其左边 比其大的在有边 循环往复
*/
public static int[] quick(int[] array) {
int length = array.length - 1;
sortQuick(array, 0, length);
return array;
}
private static void sortQuick(int[] array, int low, int length) {
if (low < length) {
int div = firstRun(array, low, length);
sortQuick(array, 0, div - 1);
sortQuick(array, div + 1, length);
}
}
private static int firstRun(int[] array, int low, int length) {
int base = array[low];
while (low < length) {
while (array[length] > base) {
length--;
}
swrap(array, low, length);
while (array[low] < base) {
low++;
}
swrap(array, low, length);
}
return low;
}
private static void swrap(int[] array, int low, int length) {
int temp = array[length];
array[length] = array[low];
array[low] = temp;
//return array;
}
我们可以看到main方法,那么怎么运行呢
很简单了吧,run就是正常运行,debug自然就是可以断点调试了,有不懂的可以私信我
有什么需要讲解的,欢迎私信留言,我会竭尽全力解决,毕竟我也是个菜鸟,哈哈😁