算法:排序算法的比较

默认为递增顺序;注:一下例子希望自己再次复习时,可以用笔在纸上画画内存图。

包括有:

  • 选择排序
  • 冒泡排序
  • 插入排序

1.选择排序

<--------------------------------------选择排序--------------------------------------->

1、选择排序(1):

选择排序的思想是,每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

选择排序1:

private static void selectionSort(int[] a){for(int i = 0;i<a.length;i++){for(int j = i+1;j<a.length;j++){if( a[j] <a[i]){int temp = a[i];a[i] = a[j];a[j] = temp;}}}                                                                        
}

选择排序2(最优):

private static void OptimizeNumSort(int[] a){int  k,temp;// k and temp  is not need to allocation  internal storage everytime.for(int i=0;i<a.length;i++){k = i;       //use k record minimum number at present ,hypothesis i  is minimum./用k记录那个最小的数for(int j = k+1;j<a.length;j++){if(a[j]<a[k]){k = j;}}if(i != k ){temp = a[i];a[i] = a[k];a[k] = temp;}}
}

 

python实现:

def selectionSort(arr):for i in range(len(arr) - 1):# 记录最小数的索引minIndex = ifor j in range(i + 1, len(arr)):if arr[j] < arr[minIndex]:minIndex = j# i 不是最小数时,将 i 和最小数进行交换if i != minIndex:arr[i], arr[minIndex] = arr[minIndex], arr[i]return arr

 

<---------------------------------------冒泡排序-------------------------------------------------->

2、冒泡排序:

 基本思想 :

设排序表长为n,从后向前或者从前向后两两比较相邻元素的值,如果两者的相对次序不对(A[i-1] > A[i]),则交换它们,其结果是将最小的元素交换到待排序序列的第一个位置,我们称它为一趟冒泡。下一趟冒泡时,前一趟确定的最小元素不再参与比较,待排序序列减少一个元素,每趟冒泡的结果把序列中最小的元素放到了序列的”最前面”。

比较相邻的元素。如果第一个比第二个大,就交换他们两个。

对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。

针对所有的元素重复以上的步骤,除了最后一个。

持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 

冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 

 

算法描述

  • 比较相邻的元素。如果第一个比第二个大,就交换它们两个;
  • 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;
  • 针对所有的元素重复以上的步骤,除了最后一个;
  • 重复步骤1~3,直到排序完成。

 

private static void bubbleSort(int[] a){int len = a.length;int temp;for(int i = len-1; i>=1;i--){for(int j = 0;j<len-1;j++){if(a[j]>a[j+1]){temp = a[j];a[j] = a[j+1];a[j+1] = temp;}}}
}

 

来个小练习:对某个类的对象进行排序:

 

    对日期(yeda-month-day)进行排序:

    使用到条件运算符(?:)

public int compare(Date date){return (year>date.year)?1:year<date.year?-1:month>date.month?1:month<date.month?-1:day>date.day?1:day<date.day?-1:0;
}

详细如下:

 

public class Test{public static void main(String[] args) {Date[] days = new Date[5];   days[0] = new Date(2006,5,4);days[1] = new Date(2006,7,4);days[2] = new Date(2008,5,4);days[3] = new Date(2004,5,9);days[4] = new Date(2004,5,4);for(int i=0;i<days.length;i++ ) {System.out.println(days[i]);                 }System.out.println("\nUp is not sort---------------------------Down after sort:\n");//bubbleSort(days);// call the mothod of bubbleSort().selectionSort(days);// call the mothod of selectionSort().for(int i=0;i<days.length;i++ ) {System.out.println(days[i]);                 }}/*Bubble sort and return sort a type;learn to bubbleSort' thinking;every sort will get  the maximum.*/public static Date[] bubbleSort(Date[] a){int len = a.length;for(int i=len-1;i>=1;i--){for (int j = 0;j<=i-1 ;j++ ) {if(a[j].compare(a[j+1]) > 0){Date temp = a[j];a[j] = a[j+1];a[j+1] = temp;}		}			}return a;}/*selection sort */public static Date[] selectionSort(Date[] a){int len = a.length;int k;Date temp;for(int i =0 ; i<len;i++){k = i;for(int j = k+1;j<len;j++){if(a[k].compare(a[j]) == 1){k = j;}}if(k != i){temp = a[k];a[k] = a[i];a[i] = temp;}}return a;}}class Date{int year,month,day;Date(int y,int m,int d){year = y;month = m;day = d;}/*method compare() mainly to compare two Date objects' size.if a>b return 1;else if  a<b return -1;else  a = b return 0;according to return value ,whether to exchange objects'quote*/public int compare(Date date){return (year>date.year)?1:year<date.year?-1:month>date.month?1:month<date.month?-1:day>date.day?1:day<date.day?-1:0;}/*remember: when print an objects'quote ,is  equal to call toString() method.so have to overwrite the toString*another:you can query the API/*/public String toString(){return "Year:Month:Day-- " + year + "-" + month + "-" + day;}
}

 

 

<--------------------------------插入排序-------------------------------->

3、插入排序(Insertion Sort)

插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

3.1 算法描述

一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:

  • 1、从第一个元素开始,该元素可以认为已经被排序;
  • 2、取出下一个元素,在已经排序的元素序列中从后向前扫描;
  • 3、如果该元素(已排序)大于新元素,将该元素移到下一位置;
  • 4、重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;
  • 5、将新元素插入到该位置后;
  • 6、重复步骤2~5。
private static void insertionSort(int[] a){System.out.println("Start....");int preIndex,current;for(int i = 1 ;i <a.length;i++){preIndex = i - 1;current = a[i];while(preIndex >= 0 && a[preIndex] >current){a[preIndex + 1] = a[preIndex];preIndex --;}a[preIndex + 1] = current;}
}

 

参考:

(1)http://www.cnblogs.com/wuxinyan/p/8615127.html(python 十大经典排序算法)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/273988.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LTTng 简介使用实战

一、LTTng简介 LTTng: (Linux Trace Toolkit Next Generation),它是用于跟踪 Linux 内核、应用程序以及库的系统软件包。LTTng 主要由内核模块和动态链接库(用于应用程序和动态链接库的跟踪)组成。它由一个会话守护进程控制,该守护进程接受来自命令行接口的命令。babeltrace 项…

黑马程序员-------------(十)Java基础知识加强(一)

JDK1.5新特性 目录1.之前已经学习过的JDK1.5新特性2.静态导入 StaticImport3.可变参数 ...4.高级for循环5.枚举6.泛型 Generic7.注解注&#xff1a;本章全部为重点内容。###################################################################################################…

java例子:数组 数3退1

500个人围成一个圈子&#xff0c;数够3人&#xff0c;就退出1个&#xff0c;问最后剩下的是几号&#xff1f;检验先有5个人&#xff0c;应该留下第4个人&#xff0c;由于是数组&#xff0c;所以第四个人的下标是3. /*achieve the funtion :count 3 kids, the quit the third k…

Android版CCLabelTTF在setstring时出现黑块

首先有个前提知识&#xff0c;cocos2dx里&#xff0c;只能在ui线程&#xff08;通常也就是主线程&#xff09;中进行渲染工作&#xff08;貌似现在有一些引擎是支持多线程渲染的&#xff0c;没有深入研究&#xff09;&#xff0c;否则大约会因为多个线程同时给GPU发指令而出现问…

java例子:九九乘法表

来吧直接上代码&#xff1a;public class Test{public static void main(String[] args) {for(int i 1; i<9;i){for (int j 1; j < i ;j ) {System.out.print(j"x"i""j*i" ");}System.out.print("\n");}} }运行之后&#xff1…

Apache的RewriteRule规则详细介绍

R[code](force redirect) 强制外部重定向 (rkyW z强制在替代字符串加上http://thishost[:thisport]/前缀重定向到外部的URL.如果code不指定&#xff0c;将用缺省的302 HTTP状态码。 gN24M 3{CF(force URL to be forbidden)禁用URL,返回403HTTP状态码。 m> 4ahue$G(force URL…

算法:查找

查找算法&#xff08;比较&#xff09;基本思想顺序查找顺序查找也称为线形查找&#xff0c;属于无序查找算法。从数据结构线形表的一端开始&#xff0c;顺序扫描&#xff0c;依次将扫描到的结点关键字与给定值k相比较&#xff0c;若相等则表示查找成功&#xff1b;若扫描结束仍…

query上传插件uploadify参数详细分析

query上传插件uploadify参数详细分析 Uploadify Version 3.2 官网&#xff1a;http://www.uploadify.com/ 注&#xff1a;文件包里有两个js分别是&#xff1a;jquery.uploadify.js 和 jquery.uploadify.min.js&#xff0c;两者其实一样&#xff0c;只需载入其中一个js即可。很明…

python 基础 list和 tuple dict和set

list Python内置的一种数据类型是列表&#xff1a;list。list是一种有序的集合&#xff0c;可以随时添加和删除其中的元素。classmates [Michael, Bob, Tracy] 要删除list末尾的元素&#xff0c;用pop()方法&#xff1a; 要删除指定位置的元素&#xff0c;用pop(i)方法&#x…

IIS的安装

xp上好像只能装IIS5&#xff0c;IIS6根本就装不了转载于:https://www.cnblogs.com/hyk110988/p/3372592.html

py四种时间格式

time有四种类型&#xff08;time, datetime, string, timestamp&#xff09;1. time stringstring是最简单的表示time的方式如如下代码生成的即为string123>>> import time>>> time.ctime()Wed Nov 30 13:53:31 2016或者更简单的生成一个字符串1time_string …

type_traits应用

工作遇到这样的例子&#xff0c;对不同数据进行计算处理&#xff0c;得到一组结果集&#xff0c;包括计数、比例等。各个计算处理过程不同&#xff0c;结果集数据结构相同&#xff0c;但并非所有计算过程均有计数、比例的结果&#xff0c;有些可能只有计数&#xff0c;有些只有…

csv.writer写入文件有多余的空行

在用csv.writer写入文件的时候发现中间有多余的空行。 最早打开方式只是‘w’&#xff0c;会出现多余的空行&#xff0c;网上建议使用binary形式‘wb’打开可以解决问题&#xff1a; with open(egg2.csv, wb) as cf:12 不过只能在python2下运行&#xff0c;python3报错&#xf…

java笔记之连接数据库

1、一定不要忘了导入包 java工程&#xff1a;lib文件夹下mysql-connector-java.jar--->Build Path Web工程:当web下的servlet需要连接数据库时&#xff0c;除了上一步导入包还要在WEB-INF/lib导入mysql-connector-java.jar 2、关于乱码&#xff0c;查询 在终端查询数据时&am…

那些不能错过的XCode插件

XCode颜色显示插件ColorSense代码里的那些冷冰冰的颜色数值&#xff0c;到底时什么颜色&#xff1f;如果你经常遇到这个问题&#xff0c;每每不得不运行下模拟器去看看&#xff0c;那么这个插件绝对不容错过。更彪悍的是你甚至可以点击显示的颜色面板&#xff0c;直接通过系统的…

python爬虫第一课 开发环境配置

一、Python3的安装 二、请求库的安装 1、requests的安装 直接pip安装&#xff1a;pip3 install requests 2、Selenium的安装 selenium是一个自动测试化工具&#xff0c;利用它我们可以驱动浏览器执行特定的动作&#xff0c;如点击、下拉等操作。 直接pip安装&#xff1a;pip in…

用JSLint精炼提升JavaScript代码

由于移动应用的盛行和HTML5的广泛运用&#xff0c;JavaScript正越来越流行。JavaScript受欢迎的部分原因是因为它的灵活便捷&#xff0c;你可以快速上手&#xff0c;它不需要重量级的开发环境&#xff0c;也不需要第三方应用支持&#xff0c;只要你打开一个文本编辑器&#xff…

pymssql出现的错误

安装pymssql出现的错误&#xff1a;如下&#xff1a;---------------------------------------- Failed building wheel for pymssqlRunning setup.py clean for pymssql Failed to build pymssql Installing collected packages: pymssqlRunning setup.py install for pymssq…

javascript设计思维

//一.把参数当作私有变量使用 (function (a, b) {//把参数当作私有变量使用&#xff0c;省略了var&#xff0c;也节省了行数console.log(b) //undefined&#xff0c;所有未赋值的变量均为undefined })(window);//二.把参数作为参数使用 var obj_init function (b, d, f) {//1…

linux第一章简答

linux第一章简答题&#xff1a; 1、你在你的主机上面安装了一张网卡&#xff0c;但是开机之后&#xff0c;系统却无法使用&#xff0c;你确定网卡是好的&#xff0c;那么可能的问题出在哪里&#xff1f;该如何解决&#xff1f; 答&#xff1a;因为所有的硬件都没有问题&#xf…