冒泡排序
冒泡排序主要的思想就是在长度为n的数组中,通过n-1轮对比,每一轮对比都是从左往右,当发现左边一个大于右边一个值时,就进行调换,每一轮对比完成,就相当于整个数组减少一个元素(因为每一轮过后,都会使本轮数组的末尾为最大值,因此只需要将前面的数字变成有序即可)。
public static int[] bubbleSort(int[] a){
int len = a.length;
if (len==0) {
return a;
}
//i可以看做表示第几轮
for (int i = 0;i<len-1;i++){
//因为每一轮都需要减少一个,所以这需要减去i,i可以看做是第几轮
for (int j = 0; j < len-1-i; j++) {
if (a[j+1]<a[j]){
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
return a;
}
选择排序
选择排序,也是一种比较好理解的算法,长度为n的数组中,通过n-1轮对比,每轮遍历找出最小(大)的,然后与数组首(末)位交换值,此时这个值就到了最终结果的位置,所以下一轮就可以忽略这个值,遍历其它的值,直到最后只剩一个数字。
public static int[] selectSort(int[] a){
int len = a.length;
if (len==0) {
return a;
}
for (int i = 0; i <len;i++){
int min = i;
for (int j = i+1; j < len; j++) {
if (a[j]<a[min]){
min = j;
}
}
int temp = a[min];
a[min] = a[i];
a[i] = temp;
}
return a;
}
插入排序
插入排序,长度为n的数组中,通过n-1轮对比,从数组的第二位开始,每一轮记录下第一个数temp,向前开始比较,当前数比temp大,则当前数向后移一位,如果小于或等于,则将temp放到当前数的后一位,本轮结束,如果到数组首位都比temp大,则temp放到数组首位,本轮结束。然后每一轮都向后一位作为temp,直到最后一位完成排序。
public static int[] insertSort(int[] a){
int len = a.length;
if (len==0) {
return a;
}
for (int i = 1; i < len; i++) {
int pre = i-1;
int temp = a[i];
while (pre>=0&&a[pre]>temp){
a[pre+1] = a[pre];
pre--;
}
a[pre+1] = temp;
}
return a;
}
今天主要就讲解这几种排序算法,后续还会讲到堆排序、快排、归并排序等,有什么不对的欢迎指出!