排序算法

简单排序算法

冒泡排序

  • 两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止

直接插入排序

  • 通过 n-i 次关键字间的比较,从 n-i+1 个记录中选出关键字最小的记录,并和第 i 个记录交换

简单选择排序

改进算法

快速排序(冒泡排序的改进)

  • 先随机选择一个记录,比它大的放在右边,比它小的放在左边,采用递归的方式进行排序
  • java 代码
/**
* 快排,先找一个记录,把大于他的放在右边,小的放在左边,然后采用递归的方式进行排序
*/
public class QuickSort2 { public void quickSort(int[] array) {
if (array.length > 0) {
doQuickSort(array, 0, array.length - 1);
}
} private void doQuickSort(int[] array, int left, int right) {
if (left >= right) {
return;
}
int low = left;
int high = right;
int temp = array[low];
while (low != high) {
while (low < high && array[high] > temp) {
high--;
}
array[low] = array[high];
while (low < high && array[low] < temp) {
low++;
}
array[high] = array[low];
}
array[high] = temp;
Utils.printArray(array);
doQuickSort(array, left, low - 1);
doQuickSort(array, high + 1, right);
} public static void main(String[] args) {
QuickSort2 qs = new QuickSort2();
int[] a = {9, 1, 5, 8, 3, 7, 4, 6, 2};
qs.quickSort(a);
}
}
  • 测试结果
2 1 5 8 3 7 4 6 9 -
1 2 5 8 3 7 4 6 9 -
1 2 4 3 5 7 8 6 9 -
1 2 3 4 5 7 8 6 9 -
1 2 3 4 5 6 7 8 9 -

希尔排序

堆排序

归并排序

查找算法

  • 二分查找

常见数据结构题目

  • 翻转链表

    • 通过栈实现翻转
    public static void reverseNode(Node head) {
Stack<Node> stack = new Stack<>();
while (head != null) {
stack.push(head);
head = head.next;
}
while (!stack.isEmpty()) {
System.out.println(stack.pop().data + "");
}
}
- 通过Arraylist,然后倒叙输出
    public static void reverseNodeByArrayList(Node head) {
ArrayList<Node> list = new ArrayList<>();
while (head != null) {
list.add(head);
head = head.next;
}
for (int i = list.size()-1 ; i >= 0; i--) {
System.out.println(list.get(i).data);
}
}
  • 两个栈实现一个队列
  • 两个队列实现一个栈
  • string 转 int
  • 合并 k 个已排序的链表
  • 给已排序的链表去重
    • 思路: 当前节点跟下一个节点的值做比较,相等的话,就把当前节点指向下一个节点的下一个节点,把下一个节点去除了,就把重复的元素去掉了。
    • Java 代码
    public static Node deleteDuplicatesNodeFromLinkedlist(Node head) {
if (head == null) {
return null;
}
Node preNode = head;
Node currentNode = head.next;
while (currentNode != null) {
if (currentNode.data == preNode.data) {
preNode.next = currentNode.next;
} else {
preNode = currentNode;
}
currentNode = preNode.next;
}
return head;
}

参考:https://www.jianshu.com/p/ae97c3ceea8d

Android 常用算法的更多相关文章

  1. Android常用开源项目

    Android开源项目第一篇——个性化控件(View)篇   包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.Progre ...

  2. Android常用酷炫控件(开源项目)github地址汇总

    转载一个很牛逼的控件收集帖... 第一部分 个性化控件(View) 主要介绍那些不错个性化的 View,包括 ListView.ActionBar.Menu.ViewPager.Gallery.Gri ...

  3. Android 常用炫酷控件(开源项目)git地址汇总

    第一部分 个性化控件(View) 主要介绍那些不错个性化的 View,包括 ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.P ...

  4. Android 常用开发工具以及Mac常用软件

    Android 常用的开发工具记录.其中包括AndroidStudio(IDEA)插件.Mac 上好用的软件以及国内知名Android开发者博客等. Android Studio 插件 codota ...

  5. 总结Objective-c常用算法

          今天是星期天,想睡到10点起床,结果认为自己太奢侈了,不能这么做,于是把闹钟设置成了6:30:结果终于9:36醒了,起床,无缘无故迟了,好吧,就算太累了吧,周天就原谅自己一回.终于到了中午 ...

  6. Atitit 编程语言常用算法attilax总结

    Atitit 编程语言常用算法attilax总结 1. 编译算法分类and   数据操作算法.1 1.1. Tab driver stat  状态转换表格算法1 1.2. Nest case 词法分析 ...

  7. GJM : 数据结构 - 轻松看懂机器学习十大常用算法 [转载]

     转载请联系原文作者 需要获得授权,非法转载 原文作者将享受侵权诉讼 文/不会停的蜗牛(简书作者)原文链接:http://www.jianshu.com/p/55a67c12d3e9 通过本篇文章可以 ...

  8. Android 常用数据适配器SimpleAdapter

    在<Android 常用数据适配器ArrayAdapter>中介绍了ArrayAdapter数据适配器.但是存在一个缺陷,那就是条目的图标都固定相同,要显示每个条目的图标都不相同,那么使用 ...

  9. Android常用设计模式(二)

    Android常用设计模式之观察者模式 观察者设计模式在Android应用中会经常用到,模式原理类似于这样的场景: 用户订报纸,然后在报社登记,报社来统计用户(添加用户),用户也可以取消订阅,报社删除 ...

随机推荐

  1. UVALive - 4618 Wormholes(负环)

    题目大意:给出出发点和终点和m个虫洞(虫洞的出发点.终点,生成时间和花费时间).问从起点到终点花费的最小时间 解题思路:关键是有负环,所以直接跑最短路算法的话会TLE.所以负环要处理一下 可是这个负环 ...

  2. 《跟孩子学Python》

    1:Python对象之间的赋值是内容赋值而不是引用赋值 a = ["aaa","bbb","ccc"] b = a print a prin ...

  3. rotate-list 旋转部分链表

    Given a list, rotate the list to the right by k places, where k is non-negative. For example:Given1- ...

  4. Java通过wait()和notifyAll()方法实现线程间的通信

    Java代码(使用了2个内部类): package Threads; import java.util.LinkedList; /** * Created by Frank */ public cla ...

  5. yii框架的部署方法

    yii框架(yii framework)的部署方法 刚開始学习的人来说,部署yii框架还是有一定难度的,Yii是一个基于组件.用于开发大型 Web 应用的高性能 PHP 框架.Yii提供了今日Web ...

  6. Vivaldi浏览器媲美Chrome

    Vivaldi跨平台的浏览器,很好的兼容性...基本上跟Chrome一个层次的... 好的东西,用一次就明白!好酒,酒香巷子深... Download: https://vivaldi.com/dow ...

  7. glog的使用

    主要还是看官方文档吧 win32下,把#define GLOG_NO_ABBREVIATED_SEVERITIES 放到#include <windows.h>之前,具体说明文档中有说. ...

  8. iOS 常用的几个math函数

    1.取整数 double ceil (double); 取上整 double floor (double); 取下整 2.绝对值 double fabs (double);求绝对值 double ca ...

  9. apache2.2 虚拟主机配置(转)

    转自:http://blog.csdn.net/zm2714/article/details/8351342 一.改动httpd.conf 打开appserv的安装文件夹,找到httpd.conf文件 ...

  10. linux shell 脚本攻略学习15--如何只列出目录,如何快速切换目录

    工作中经常遇到关于目录方面的问题,例如,如何只列出当前目录下的所有目录,以及如何快速高效的切换目录,而不需要使用鼠标,下面将简单介绍关于这两方面的解决方案: 一.如何只列出目录? 看似简单的任务,其实 ...