一.冒泡排序
基本思想:两个数比较大小,较大的下沉,小的上浮。
1.第一趟,相邻的两个数比较,后一个数小,就交换两数的位置;
2.依次往后走,最后找到最大的数;
3.针对所有的数重复以上的步骤,除了最后一个;
4.持续每次对越来越少的数重复上面的步骤,直到没有任何一对数字需要比较。
例如: 3,2,7,1,5
第一趟第一次:2,3,7,1,5
第二次:2,3,7,1,5
第三次:2,3,1,7,5
第四次:2,3,1,5,7
第二趟第一次:2,3,1,7,5
第二次:2,1,3,7,5
……
最后:1,2,3,5,7
代码如下:
private static void BubbleSort(int[] arr) {
for (int i = 0; i < arr.length; i++) { //表示趟数,一共走n-1次
for (int j = 0; j < arr.length-1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
System.out.print(arr[j]+\" \");
}
System.out.println();
}
}
二.插入排序
基本思想:
在要排序的一组数据中,假定前n-1个数据已经排好序,将第n个数据插入排好序的这个有序数列中,使得插入后的数列也是排好序的。如此,反复循环,知道全部排好序。
private static void InsertSort(int[] arr) {
for (int i = 0; i < arr.length-1; i++) {
for (int j = i + 1; j >0; j--) {
if (arr[j] < arr[j - 1]) {
int temp = arr[j];
arr[j] = arr[j - 1];
arr[j - 1] = temp;
}
}
}
}
三.快速排序
基本思想:
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
实现思路:
1.以第一个数作为基准,将数组分为两个子区,左区的全部小于等于这个基准值,右区的大于等于这个基准值。此时,两个子区还处于乱序状态。
2.在把左区作为一个整体,用步骤1再处理一次;右区同理。
3.重复步骤1.2.直至左区处理完毕。
private static void QuickSort(int[] arr, int low, int high) {
if (low > high) {
return;
}
int key = arr[low];
int i = low;
int j = high;
while (j > i) {
// 从后往前比较
while (j > i && arr[j] >= key) { // 先看右边,找比基准值小的,依次递减
j--;
}
while (j > i && arr[i] < key) { // 再看左边,找比基准值大的,依次递增
i++;
}
if (j > i) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
// 将i=j的值设为基准值
arr[low] = arr[i];
arr[i] = key;
// 递归调用左区
QuickSort(arr, low, j - 1);
// 递归调用右区
QuickSort(arr, j + 1, high);
}
如果有正在学java的程序员,可来我们的java技术学习扣qun哦:59,789,1510里面免费送java的视频系统教程噢!
继续阅读与本文标签相同的文章
-
微信小程序前景大好,寻找第三方公司进行开发靠谱吗?
2026-05-18栏目: 教程
-
谷歌翻脸无用,华为淡然应对,成功挽回海外市场
2026-05-18栏目: 教程
-
申请入驻小程序付费吗?自主开发和第三方公司开发应该如何选择?
2026-05-18栏目: 教程
-
中国快递惊呆德国人,表示要以中国为榜样,学习这项黑科技
2026-05-18栏目: 教程
-
阿里云数据库RDS通用型和独享型区别在哪?如何选择?
2026-05-18栏目: 教程
