排序算法

简单排序算法

冒泡排序

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

直接插入排序

  • 通过 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. Python接收邮件并保存至MySQL

    转自:http://www.360doc.com/content/14/0103/13/11789990_342303735.shtml 参考了一些网络上的资料,做了个简单程序,使用python接收邮 ...

  2. Xamarin.Android之SQLite.NET ORM

    一.前言 通过<Xamarin.Android之SQLiteOpenHelper>和<Xamarin.Android之ContentProvider>的学习,我们已经掌握了如何 ...

  3. visual studio运行时库MT、MTd、MD、MDd的研究

    在开发window程序是经常会遇到编译好好的程序拿到另一台机器上面无法运行的情况,这一般是由于另一台机器上面没有安装响应的运行时库导致的,那么这个与编译选项MT.MTd.MD.MDd有什么关系呢?这是 ...

  4. 给X240换上了三键触摸板

    X240自带的触摸板非常不好用, 对于我这样的指点杆重度用户, 每次要按下整块板真的是太费力了, 而且在夜里声音很吵. 在淘宝上买了三键的X250的触摸板换上了. 这是购买的触摸板的型号 换的时候, ...

  5. &lt;十一&gt;读&lt;&lt;大话设计模式&gt;&gt;之抽象工厂模式

    学习设计模式有一段时间了,对设计模式有一个体会,就是没那么难.就是设计程序遵循一些原则,让代码可复用,在改动的时候不用涉及太多的类,扩展方便.抽象工厂模式名字听起来抽象.但理解起来一点也不抽象,用语言 ...

  6. 【公众号】微信第三方登录(静默授权和非静默授权)(具体代码:U盘 新浪云SAE)

    一.微信联合登录是怎么登录的,有几种登录方式:微信联合登录和微信授权登录[授权登录(非静默授权)与静默授权] [主动授权]:需要用户确认登录,这样可以通过用户的个人确认,获取用户全面的信息,无论是否关 ...

  7. Nginx 日志改成 JSON 格式

    Nginx 日志默认为普通文本的格式,例如,下面是 Nginx 的一行访问日志: 10.88.122.105 - - [02/Dec/2017:09:15:04 +0800] "GET /j ...

  8. 魅族MX四核手机转让,二手淘宝上+hi-pda论坛结合使用成功已出

    2013-3-14 内容存档在evernote,笔记名"魅族MX四核手机转让,二手淘宝上+hi-pda论坛结合使用成功已出"

  9. opencv 摄像头 线程

    #include <stdio.h>#include <stdlib.h>#include <string.h>#include <pthread.h> ...

  10. 【JavaScript】浅析JavaScript对象如何添加属性和方法

    向JavaScript类中添加属性和方法,最直观的做法就是在类中定义属性和方法.JavaScript是一门弱语言,除了直接定义还可以用prototype来添加. 下面介绍从外部向JavaScript添 ...