我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java数据结构常见几大排序是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java数据结构常见几大排序是什么

这篇文章给大家分享的是有关Java数据结构常见几大排序是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

一、排序的概念和分类

1.排序的基本概念

排序是将一批无序的记录(数据)重新排列成按关键字有序的记录序列的过程。

排序分为内部排序和外部排序

  • 若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序。

  • 反之,若参加排序的记录数量很大,整个序列的排序过程不可能在内存中完成,则称此类排序问题为外部排序。

内部排序的过程是一个逐步扩大记录的有序序列长度的过程

2.排序的稳定性

假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。

总结起来就是,如果一个数据在排序过程中发生了跳跃行为,则为不稳定的排序;反之,则是稳定的排序。

Java数据结构常见几大排序是什么

Java数据结构常见几大排序是什么

  • 时间复杂度:一个算法执行所耗费的时间

  • 空间复杂度:运行完一个程序所需的内存大小。

二、常见排序

1.直接插入排序

直接插入排序的基本操作是讲一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。

代码:

public static void insertSort(int[] array) {        for (int i = 1; i < array.length; i++) {            int tmp = array[i];            int j = i-1;            for (; j >= 0 ; j--) {                if(array[j] > tmp) {                    array[j+1] = array[j];                }else {                    break;                }            }            //j回退到了小于0的地方            array[j+1] = tmp;        }    }

流程图解:

Java数据结构常见几大排序是什么

时间和复杂度分析: 我们在实现的这个排序算法的时候,只借助了一个辅助的记录空间。

所以最好的情况就是我们原来需要的排序的元素之间就是有序的,比如说{1,2,3,4,5,6},那么我们需要比较的次数,其实就是临近两个元素的比较,因此没有移动的记录,时间复杂度为O(n);

最坏的情况就是元素都是逆序的,如{6,5,4,3,2,1},所以都需要比较,移动次数达到O(n^2).

稳定性:稳定

插入排序,初始数据越接近有序,时间效率越高

2.希尔排序

希尔排序法又称缩小增量法。希尔排序法的基本思想是:先选定一个整数,把待排序文件中所有记录分成个组,所有距离为的记录分在同一组内,并对每一组内的记录进行排序。然后,重复上述分组和排序的工作。当到达=1时,所有记录在统一组内排好序。

希尔对记录的分组,不是简单地“逐段分割”,而是将相隔某个“增量”的记录分成一组。

在严薇敏的《数据结构》里面是这样说的:

Java数据结构常见几大排序是什么

上面的话可能有点难理解,下面我们通过画图来了解一下希尔排序的本质。

希尔排序跟直接插入排序有点相似,可以说是直接插入排序的升级版。不同在于,希尔排序的比较方式变成了跳跃式的。比如说下面这组数据的第一次排序。

Java数据结构常见几大排序是什么

最终排序完成了。

Java数据结构常见几大排序是什么

我们来看一下希尔排序的代码:

public static void shell(int[] array,int gap) {        for (int i = gap; i < array.length; i++ ) {            int tmp = array[i];            int j = i-gap;            for (; j >= 0 ; j -= gap) {                if(array[j] > tmp) {                    array[j+gap] = array[j];                }else {                    break;                }            }            array[j+gap] = tmp;        }    }//按照5、3、1分组    public static void shellSort1(int[] array) {        int[] drr = {5,3,1};        for (int i = 0; i < drr.length; i++) {            shell(array,drr[i]);        }    }

是不是跟直接插入排序很像?所以我们才说,希尔排序是直接插入排序的升级版。它不是随便分组后各自排序,而是将相隔某个增量gap的记录组成一个子序列,实现跳跃式移动,使得排序的效率提高了。

所以,选取“增量”是非常关键的一步,值得一提的是,选取什么样的“增量”,目前为止尚没有一个没完美的增量序列。

复杂度分析:

  • 时间复杂度[和增量有关系的]:O(n^1.3 - n^1.5)。

  • 空间复杂度:O(1)

稳定性:不稳定的。

3.简单选择排序

简单选择排序:通过n-i次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第 i(1 &le; i &le;n) 个记录交换

public static void selectSort1(int[] array) {        for (int i = 0; i < array.length; i++) {            for (int j = i+1; j < array.length; j++) {                //1 2 3 4 5 6                if(array[j] < array[i]) {                    swap(array,i,j);                }            }        }    }    public static void swap(int[] array,int i,int j) {        int tmp = array[i];        array[i] = array[j];        array[j] = tmp;

Java数据结构常见几大排序是什么

有时候,我们可能不需要循环那么多次,循环一两次就有序了,如果在有序的序列中继续循环,则会造成时间的浪费。为避免这种情况,所以我们可以对代码进行稍稍改进:

public static void selectSort(int[] array) {        for (int i = 0; i < array.length; i++) {            int minIndex = i;            for (int j = i+1; j < array.length; j++) {                //找到最小值下标                if(array[j] < array[minIndex]) {                    minIndex = j;                }            }            swap(array,i,minIndex);        }    }

复杂度分析:

  • 时间复杂度:O(n^2)

  • 空间复杂度:同接下介绍的冒泡排序一样,只有在两个记录交换时需要一个辅助空间,所以空间复杂度为O(1).

稳定性:稳定

4.堆排序

堆排序的基本原理也是选择排序,只是不在使用遍历的方式查找无序区间的最大的数,而是通过堆来选择无序区间的最大的数。

我上一篇文章有详细介绍,这里就不再说了,大家感兴趣可以去了解一下。 Java数据结构之优先级队列(堆)图文详解

这里也给一下代码:

public static void heapSort(int[] array) {        //1、建堆  O(N)        createHeap(array);        int end = array.length-1;        //2、交换然后调整 O(N * log N)        while (end > 0) {            swap(array,0,end);            shiftDown(array,0,end);            end--;        }    }    public static void createHeap(int[] array) {        for (int parent = (array.length-1-1)/2; parent >= 0 ; parent--) {            shiftDown(array,parent,array.length);        }    }    public static void shiftDown(int[] array,int parent,int len) {        int child = 2*parent+1;//左孩子下标        while (child < len) {            if(child+1 < len && array[child] < array[child+1]) {                child++;            }            //child下标 就是左右孩子最大值的下标            if(array[child] > array[parent]) {                swap(array,child,parent);                parent = child;                child = 2*parent+1;            }else {                break;            }        }    }

复杂度分析:

  • 时间复杂度:O(n * log2(n))&mdash;&mdash;2指的是以2为底

  • 空间复杂度:O(1)

稳定性:不稳定

【注意】

  • 堆排序只能用于顺序结构,不能用于链式结构

  • 由于建初堆的时候所需比较的次数较多,因此记录次数较少时不宜采用。

5.冒泡排序

冒泡排序是一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。

Java数据结构常见几大排序是什么

代码:

public static  void bubbleSort(int[] array) {        for (int i = 0; i < array.length-1; i++) {            for (int j = 0; j < array.length-1; j++) {                if(array[j] > array[j+1]) {                    swap(array,j+1,j);                }            }        }    } public static void swap(int[] array,int i,int j) {        int tmp = array[i];        array[i] = array[j];        array[j] = tmp;

复杂度分析:

  • 时间复杂度:O(N^2)

  • 空间复杂度:O(1)

稳定性:稳定。

6.快速排序

6.1.递归快速排序

快速排序是冒泡排序的升级版,它们都属于交换排序类,即它也是通过不断比较和移动交换来实现排序,不同的是,快排的实现增大的了记录的比较和移动的距离。

快排将关键字较大的数据从前面直接移到后面,关键字较小的记录从后面直接移到前面,从而减少了总的比较次数和移动交换次数。

快排的基本思想:

通过一趟排序将待排序的数据分割成独立的两部分,其中一部分比另一部小,然后再分别对这两部分记录并再次进行排序,以达到整个序列有序。

我们翻译翻译一下上面的那段话:

  • 首先,你得有一个中间数,比它小的放一边,比它大的放一边。这个数,我们称为基准值。

  • 采用分治思想,对左右两个小区间按照同样的方式处理,直到小区间的长度 == 1,代表已经有序,或者小区间的长度 == 0,代表没有数据。

可能大家看到这里也还是有点迷惑,我们直接上代码。

public static void quickSort(int[] array) {        quick(array,0,array.length-1);    }    public static void quick(int[] array,int left,int right) {        if(left >= right) {            return;        }        int pivot = partition(array,left,right);//基准        quick(array,left,pivot-1);        quick(array,pivot+1,right);    }

上面的代码是不是有点像二叉树的遍历?

这二者确实有相似之处,我们后面再讲。

上面还有一个partition函数,这个函数是我们快速排序最关键的地方。

     private static int partition(int[] array,int start,int end) {        int tmp = array[start];        while (start < end) {            while (start < end && array[end] >= tmp) {                end--;            }            //end下标就遇到了 < tmp的值            array[start] = array[end];            while (start < end && array[start] <= tmp) {                start++;            }            //start下标就遇到了 > tmp的值            array[end] = array[start];        }        array[start] = tmp;        return start;    }

我们下面通过图解模拟一下函数的运行过程:

Java数据结构常见几大排序是什么

可以看到,当第一轮走完之后,数据由基准值分成了两部分。

Java数据结构常见几大排序是什么

之后,我们再次对左右两部分完成同样的操作,如下:

Java数据结构常见几大排序是什么

一直递归下来,跟二叉树的遍历类似。

复杂度分析:

时间复杂度:

  • 最好情况下:O(nlogn)

  • 最坏情况下:O(n^2).

空间复杂度:O(logn)

稳定性:不稳定

  • 快排优化

不知大家看上面的图解的时候有没有一点困惑,就是我们这基准选得不好,导致第一趟递归下来的效果不好,变成了如下图:

Java数据结构常见几大排序是什么

如果我们有一种办法,先找到相对居中的那个数字,那么整个排序的时间复杂度是不是大大减小了。

于是,有人提出了随机选取一个值来作为基准,称为随机选取法。

这种做法,得看运气,因为假如选的好,刚刚选取中间值,那么,性能大大提高;如果随机得不好,比如随机到最小值或者最大值,那么性能则变成最差了。

所以有人提出一个新的方法,三数取中:

取三个关键字先进行排序,将中间数作为基准,一般取左端,右端和中间三个数。

如果运用三数取中这种方法的话,第一次比较的结果如下:

Java数据结构常见几大排序是什么

可以看到,11基本上与中间的数字相差不远了,性能大大提高。

所以,这里我们再写一个找基准的代码:

    private static int findMidValIndex(int[] array,int start,int end) {        int mid = start + ((end-start) >>> 1);        if(array[start] < array[end]) {            if(array[mid] < array[start]) {                return start;            }else if(array[mid] > array[end]) {                return end;            }else {                return mid;            }        }else {            if(array[mid] > array[start]) {                return start;            }else if(array[mid] < array[end]) {                return end;            }else {                return mid;            }        }    }

前面quick函数改动一下,如下:

public static void quick(int[] array,int left,int right) {        if(left >= right) {            return;        }        //采用三数取中法找基准值        int midValIndex = findMidValIndex(array,left,right);        swap(array,midValIndex,left);        int pivot = partition(array,left,right);//基准        quick(array,left,pivot-1);        quick(array,pivot+1,right);    }

其实,优化到这里已经很棒了 。但是,我们还能优化。

这里先插播一个知识点:

直接插入是简单排序中性能最好的。 所以如果要我们要排序的数组非常小,直接插入排序会更好。 原因在于,快速排序用到了递归操作,在大量的数据排序时,这点性能影响相对它的整体算法优势而言是可以忽略的。但是如果数组只有不多的数据需要排序,就有点大材小用了。

因此,我们在这里的优化是:

增加一个判断,当 right-left+1 不大于某个常数时,就用直接插入排序,这个常数是具体情况而定。这样我们就能保证最大化地利用两种排序的优势来完成排序工作了。

    public static void quick(int[] array,int left,int right) {        if(left >= right) {            return;        }        //加一个判断,如果区间内的数据,在排序的过程当中,小于某个范围了,可以使用直接插入排序        if(right-left+1 <= 1400) {            //使用直接插入排序            insertSort2(array,left,right);            return;        }        //1、找基准之前,我们找到中间大小的值-使用三数取中法        int midValIndex = findMidValIndex(array,left,right);        swap(array,midValIndex,left);        int pivot = partition(array,left,right);//基准        quick(array,left,pivot-1);        quick(array,pivot+1,right);    }//插入排序    public static void insertSort(int[] array,int start,int end) {        for (int i = 1; i <= end; i++) {            int tmp = array[i];            int j = i-1;            for (; j >= start ; j--) {                if(array[j] > tmp) {                    array[j+1] = array[j];                }else {                    break;                }            }            array[j+1] = tmp;        }    }
6.2.非递归方式实现

我们都知道,递归对性能是有一定影响的。所以我们也可以采用非递归的方式来实现快速排序

Java数据结构常见几大排序是什么

    public static void quickSort(int[] array) {        Stack<Integer> stack = new Stack<>();        int left = 0;        int right = array.length-1;        int pivot = partition(array,left,right);        if(pivot > left+1) {            stack.push(left);            stack.push(pivot-1);        }        if(pivot < right-1) {            stack.push(pivot+1);            stack.push(right);        }        while (!stack.isEmpty()) {           right = stack.pop();           left = stack.pop();           pivot = partition(array,left,right);            if(pivot > left+1) {                //左边有2个元素                stack.push(left);                stack.push(pivot-1);            }            if(pivot < right-1) {                //右边有2个元素                stack.push(pivot+1);                stack.push(right);            }        }    }

非递归复杂度分析:

时间复杂度:

  • 最坏情况下: O(n^2)

  • 平均情况下:O(nlogn)

空间复杂度:

  • 最坏情况下:O(n)

  • 平均情况下:O(logn)

稳定性:不稳定

7.归并排序

归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide an Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并

7.1.递归归并排序

直接上代码:

//调用了mergeSortInternal函数    public static void mergeSort1(int[] array) {        mergeSortInternal(array,0,array.length-1);    }    private static void mergeSortInternal(int[] array,int low,int high) {        if(low>=high) {            return;        }        int mid = low + ((high-low) >>> 1);//>>>无符号右移1位。就是除以2,找中间值        //左边递归        mergeSortInternal(array,low,mid);        //右边递归        mergeSortInternal(array,mid+1,high);        //合并两边数组        merge(array,low,mid,high);    }

mergeSortInternal函数的图解:

其实就是对半分开数组

Java数据结构常见几大排序是什么

这里这个merge函数是归并排序里面的关键,无论是采用递归还是非递归都必须采用到这部分的函数。

而其本质,其实就是合并两个数组,并使其有序起来。

merge函数的代码:

private static void merge(int[] array,int low,int mid,int high) {        int[] tmp = new int[high-low+1];        int k = 0;//        int s1 = low;        int e1 = mid;        int s2 = mid+1;        int e2 =  high;        while (s1 <= e1 && s2 <= e2) {            if(array[s1] <= array[s2]) {                tmp[k++] = array[s1++];            }else {                tmp[k++] = array[s2++];            }        }        while (s1 <= e1) {            tmp[k++] = array[s1++];        }        while (s2 <= e2) {            tmp[k++] = array[s2++];        }        //拷贝tmp数组的元素 放入原来的数组array当中        for (int i = 0; i < k; i++) {            array[i+low] = tmp[i];        }    }

Java数据结构常见几大排序是什么

7.2.非递归归并排序

归并排序除了用递归的方式来实现,也可以用非递归的方式来实现。

public static void mergeSort(int[] array) {        int nums = 1;//每组的数据个数        while (nums < array.length) {            //数组每次都要进行遍历,确定要归并的区间            for (int i = 0; i < array.length; i += nums*2) {                int left = i;                int mid = left+nums-1;                //防止越界                if(mid >= array.length) {                    mid = array.length-1;                }                int right = mid+nums;                //防止越界                if(right >= array.length) {                    right = array.length-1;                }                //小标确定之后,进行合并                merge(array,left,mid,right);            }            nums *= 2;数组合并后,以1-2-4-8-16-进行循环        }    }

图解如下:

Java数据结构常见几大排序是什么

感谢各位的阅读!关于“Java数据结构常见几大排序是什么”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java数据结构常见几大排序是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java数据结构常见几大排序是什么

这篇文章给大家分享的是有关Java数据结构常见几大排序是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、排序的概念和分类1.排序的基本概念排序是将一批无序的记录(数据)重新排列成按关键字有序的记录序列的过程
2023-06-29

java常见的数据结构是什么

今天小编给大家分享一下java常见的数据结构是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。本教程操作环境:window
2023-06-30

Java数据结构常见排序算法有哪些

今天小编给大家分享一下Java数据结构常见排序算法有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1、 认识排序在学校中
2023-07-05

Java数据结构之常见排序算法怎么实现

这篇文章主要介绍“Java数据结构之常见排序算法怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java数据结构之常见排序算法怎么实现”文章能帮助大家解决问题。注:后续所说的复杂度 log,都
2023-07-04

java中几种常见的排序算法是什么

java中几种常见的排序算法是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1 排序 排序,就是使一串记录,按照其中某个或某些关键字的大小,递增或递减排列的操作
2023-06-29

Java数据结构七大排序怎么使用

这篇“Java数据结构七大排序怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java数据结构七大排序怎么使用”文章吧
2023-06-29

怎么深入了解Java数据结构中常见的排序算法

本篇文章给大家分享的是有关怎么深入了解Java数据结构中常见的排序算法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一,概念1,排序排序,就是使一串记录,按照其中的某个或某些关
2023-06-29

java常用数据结构是什么

这篇文章将为大家详细讲解有关java常用数据结构是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。java数据结构有:1、数组;2、链表,一种递归的数据结构;3、栈,按照“后进先出”、“先进后出”的原则
2023-06-14

数据结构与算法的基数排序是什么

本篇内容主要讲解“数据结构与算法的基数排序是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“数据结构与算法的基数排序是什么”吧! 基数排序鸿蒙官方战略合作共建——HarmonyOS技术社区基数
2023-06-15

什么是Java数据结构

这篇文章主要讲解了“什么是Java数据结构”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“什么是Java数据结构”吧! 应用场景-背包问题背包问题:有一个背包,容量为4磅,现有如下物品:鸿蒙官
2023-06-15

java数据结构ArrayList是什么

本篇内容主要讲解“java数据结构ArrayList是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java数据结构ArrayList是什么”吧!简介ArrayList 是 java 集合框
2023-06-22

Java数据结构之插入排序与希尔排序怎么实现

这篇文章主要介绍“Java数据结构之插入排序与希尔排序怎么实现”,在日常操作中,相信很多人在Java数据结构之插入排序与希尔排序怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java数据结构之插入排序
2023-07-05

Java线性数据结构是什么

本篇内容介绍了“Java线性数据结构是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1)数组一眼看上去就知道的,像 String []、
2023-06-15

大数据分析的常见思路是什么

大数据分析的常见思路是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。数据分析的常见思路,是具有指导意义的方法论,可以指导读者往哪些方向分析数据。但不限于数据分析,这些思路,
2023-06-19

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录