排序算法总结(上)
来源:互联网 发布:凯立德导航端口怎么看 编辑:程序博客网 时间:2024/04/29 22:39
排序算法总结(上)
首先先给自己大三下学期定下一个小目标:找到暑假实习公司。
因为看了很多学长学姐写的面试经验,觉得数据结构和算法是必问的内容。想想自己对这方面的脑容量为零。
所以在正式面试之前好好恶补一下!!!
1.直接插入算法
思路: 默认前面的数据全部都是已经排好的,然后依次将后面的数据插入到合适的位置
时间复杂度:O(n^2)
最佳复杂度:O(n)/已经全部排好
图解
代码实现:
public static void insertSort(int a[]) { for (int i = 1; i < a.length; i++) { if (a[i - 1] > a[i]) {// 注意[0,i-1]都是有序的。如果待插入元素比a[i-1]还大则无需再与[i-1]前面的元素进行比较了,反之则进入if语句 int temp = a[i]; int j; for (j = i - 1; j >= 0 && a[j] > temp; j--) { a[j + 1] = a[j];// 把比temp大或相等的元素全部往后移动一个位置 } a[j + 1] = temp;// 把待排序的元素temp插入腾出位置的(j+1) } } System.out.println(""); System.out.println("****1.直接排序之后****:"); for (int i = 0; i < a.length; i++) { System.out.print(a[i] + ","); } }
2.希尔排序
思路:希尔排序就是将插入排序基础上的将原来的间隔由1变为:(n/2),(n/4),(n/8)…直到n=1;n为数组的长度
时间复杂度:O(n^1.3)
图片解释
代码实现:
public static void shellInsertSort(int a[], int n, int dk) { if (n < 2) return; for (int i = dk; i < n; i++) { if (a[i - dk] > a[i]) { int key = a[i]; int j; for (j = i - dk; j >= 0 && a[j] > key; j -= dk) { a[j + dk] = a[j]; } a[j + dk] = key; } } } public static void shellSort(int a[]) { int n = a.length; int dk = n / 2; while (dk >= 1) { shellInsertSort(a, n, dk); dk /= 2; } System.out.println(""); System.out.println("****2.希尔排序之后****:"); for (int i = 0; i < a.length; i++) { System.out.print(a[i] + ","); } }
3.选择排序
思路:每次都选择一个最大值放在最后面,选择一个最小值放在前面,(就是将当前的数和后面所有的数比较,找到一个最小的数进行交换)
时间复杂度:O(n^2)
图片解释
代码实现:
public static void selectSort(int a[]) { if (a.length < 2) return; for (int i = 0; i < a.length - 1; i++) { int min = i; for (int j = i + 1; j < a.length; j++) { // 将当前的和后面的进行对比,找出一个比当前还要小的然后和当前的进行互换位置 if (a[j] < a[min]) { min = j; } } if (min != i) { int temp = 0; temp = a[i]; a[i] = a[min]; a[min] = temp; } } System.out.println(""); System.out.println("****3.选择排序之后:****"); for (int i = 0; i < a.length; i++) { System.out.print(a[i] + ","); } }
0 0
- 排序算法总结(上)
- 排序算法总结(上)
- 排序算法(上)
- 排序算法(上)
- 排序算法(总结)
- 排序算法总结(1)
- 排序算法总结(一)
- 排序算法总结(二)
- 排序算法总结(三)
- 排序算法总结(一)
- 排序算法总结(二)
- 排序算法总结(三)
- 排序算法总结(四)
- 排序算法(个人总结)
- 排序算法(九):总结
- 排序算法总结(一)
- 排序算法总结(二)
- 排序算法总结(三)
- 回文词 镜像串 ctype.h
- 求一个数的二进制中1的个数
- 临界知识---效率突围
- MINA、Netty、Twisted一起学(十二):HTTPS
- 指针数组和数组指针
- 排序算法总结(上)
- JQuery中的ajax
- hadoop安装
- react的应用之道——实践&&领悟
- 什么是jsx
- c语言
- 什么是jsx
- 【原创达人】如何为WINPE添加NVME驱动
- 如何使用jsx