ImageVerifierCode 换一换
格式:DOCX , 页数:11 ,大小:16.99KB ,
资源ID:10278126      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10278126.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(android面试题之排序.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

android面试题之排序.docx

1、android面试题之排序package com.softeem.jbs.lesson4; import java.util.Random; /* * 排序测试类 * 排序算法的分类如下: * 1.插入排序(直接插入排序、折半插入排序、希尔排序); * 2.交换排序(冒泡泡排序、快速排序); * 3.选择排序(直接选择排序、堆排序); * 4.归并排序; * 5.基数排序。 * * 关于排序方法的选择: * (1)若n较小(如n50),可采用直接插入或直接选择排序。 * 当记录规模较小时,直接插入排序较好;否则因为直接选择移动的记录数少于直接插人,应选直接选择排序为宜。 * (2)若文件初始状

2、态基本有序(指正序),则应选用直接插人、冒泡或随机的快速排序为宜; * (3)若n较大,则应采用时间复杂度为O(nlgn)的排序方法:快速排序、堆排序或归并排序。 * */ public class SortTest /* * 初始化测试数组的方法 * return 一个初始化好的数组 */ public int createArray() Random random = new Random(); int array = new int10; for (int i = 0; i 10; i+) arrayi = random.nextInt(100) - random.nextInt(100

3、);/生成两个随机数相减,保证生成的数中有负数 System.out.println(=原始序列=); printArray(array); return array; /* * 打印数组中的元素到控制台 * param source */ public void printArray(int data) for (int i : data) System.out.print(i + ); System.out.println(); /* * 交换数组中指定的两元素的位置 * param data * param x * param y */ private void swap(int dat

4、a, int x, int y) int temp = datax; datax = datay; datay = temp; /* * 冒泡排序-交换排序的一种 * 方法:相邻两元素进行比较,如有需要则进行交换,每完成一次循环就将最大元素排在最后(如从小到大排序),下一次循环是将其他的数进行类似操作。 * 性能:比较次数O(n2),n2/2;交换次数O(n2),n2/4 * * param data 要排序的数组 * param sortType 排序类型 * return */ public void bubbleSort(int data, String sortType) if (so

5、rtType.equals(asc) /正排序,从小排到大 /比较的轮数 for (int i = 1; i data.length; i+) /将相邻两个数进行比较,较大的数往后冒泡 for (int j = 0; j dataj + 1) /交换相邻两个数 swap(data, j, j + 1); else if (sortType.equals(desc) /倒排序,从大排到小 /比较的轮数 for (int i = 1; i data.length; i+) /将相邻两个数进行比较,较大的数往后冒泡 for (int j = 0; j data.length - i; j+) if

6、(dataj dataj + 1) /交换相邻两个数 swap(data, j, j + 1); else System.out.println(您输入的排序类型错误!); printArray(data);/输出冒泡排序后的数组值 /* * 直接选择排序法-选择排序的一种 * 方法:每一趟从待排序的数据元素中选出最小(或最大)的一个元素, 顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。 * 性能:比较次数O(n2),n2/2 * 交换次数O(n),n * 交换次数比冒泡排序少多了,由于交换所需CPU时间比比较所需的CUP时间多,所以选择排序比冒泡排序快。 * 但是N比较大时,比

7、较所需的CPU时间占主要地位,所以这时的性能和冒泡排序差不太多,但毫无疑问肯定要快些。 * * param data 要排序的数组 * param sortType 排序类型 * return */ public void selectSort(int data, String sortType) if (sortType.equals(asc) /正排序,从小排到大 int index; for (int i = 1; i data.length; i+) index = 0; for (int j = 1; j dataindex) index = j; /交换在位置data.length

8、-i和index(最大值)两个数 swap(data, data.length - i, index); else if (sortType.equals(desc) /倒排序,从大排到小 int index; for (int i = 1; i data.length; i+) index = 0; for (int j = 1; j = data.length - i; j+) if (dataj dataindex) index = j; /交换在位置data.length-i和index(最大值)两个数 swap(data, data.length - i, index); else

9、System.out.println(您输入的排序类型错误!); printArray(data);/输出直接选择排序后的数组值 /* * 插入排序 * 方法:将一个记录插入到已排好序的有序表(有可能是空表)中,从而得到一个新的记录数增1的有序表。 * 性能:比较次数O(n2),n2/4 * 复制次数O(n),n2/4 * 比较次数是前两者的一般,而复制所需的CPU时间较交换少,所以性能上比冒泡排序提高一倍多,而比选择排序也要快。 * * param data 要排序的数组 * param sortType 排序类型 */ public void insertSort(int data, St

10、ring sortType) if (sortType.equals(asc) /正排序,从小排到大 /比较的轮数 for (int i = 1; i data.length; i+) /保证前i+1个数排好序 for (int j = 0; j datai) /交换在位置j和i两个数 swap(data, i, j); else if (sortType.equals(desc) /倒排序,从大排到小 /比较的轮数 for (int i = 1; i data.length; i+) /保证前i+1个数排好序 for (int j = 0; j i; j+) if (dataj datai)

11、 /交换在位置j和i两个数 swap(data, i, j); else System.out.println(您输入的排序类型错误!); printArray(data);/输出插入排序后的数组值 /* * 反转数组的方法 * param data 源数组 */ public void reverse(int data) int length = data.length; int temp = 0;/临时变量 for (int i = 0; i length / 2; i+) temp = datai; datai = datalength - 1 - i; datalength - 1 -

12、 i = temp; printArray(data);/输出到转后数组的值 /* * 快速排序 * 快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为两个子序列(sub-lists)。 * 步骤为: * 1. 从数列中挑出一个元素,称为 基准(pivot), * 2. 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分割之后,该基准是它的最后位置。这个称为分割(partition)操作。 * 3. 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。 *

13、递回的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递回下去,但是这个算法总会结束,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。 * param data 待排序的数组 * param low * param high * see SortTest#qsort(int, int, int) * see SortTest#qsort_desc(int, int, int) */ public void quickSort(int data, String sortType) if (sortType.equals(asc) /正排序,从

14、小排到大 qsort_asc(data, 0, data.length - 1); else if (sortType.equals(desc) /倒排序,从大排到小 qsort_desc(data, 0, data.length - 1); else System.out.println(您输入的排序类型错误!); public static void main(String args) SortTest sortTest = new SortTest(); int array = sortTest.createArray(); System.out.println(=冒泡排序后(正序)=)

15、; sortTest.bubbleSort(array, asc); System.out.println(=冒泡排序后(倒序)=); sortTest.bubbleSort(array, desc); array = sortTest.createArray(); System.out.println(=倒转数组后=); sortTest.reverse(array); array = sortTest.createArray(); System.out.println(=选择排序后(正序)=); sortTest.selectSort(array, asc); System.out.println(=选择排序后(倒序)=); sortTest.selectSort(array, desc); array = sortTest.createArray(); System.out.println(=插入排序后(正序)=); sortTest.insertSort(array, asc); System.out.println(=插入排序后(倒序)=); sortTest.insertSort(array, desc);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1