排序算法(一)
来源:互联网 发布:自动换ip软件 编辑:程序博客网 时间:2024/05/18 06:23
最近和原来的室友聊聊天,他建议我开一个博客记录一下自己的学习情况,能够更方便的对自己学习的知识进行总结和复习,由此开启了我的博客之旅。
下面进入正题,我最近复习了一下排序算法,按照时间复杂度将这些算法分成两篇文章进行讲解。排序算法分为内部排序和外部排序,内部排序数据是在内存中进行排序的,外部排序是针对数据量特别大的情况而言,在此处我提到的排序算法都是内部排序算法,首先让我们来看一下时间复杂度为O(n^2)的选择排序。
一、选择排序的基本思想:第一趟先设置第一个元素为最小的元素,然后用其余的n-1个元素分别和这个元素比较,经过一趟比较之后整个数组最小的元素就放到了数组的第一个元素上。然后开始第二趟排序,设置第二个元素为最小的元素,然后和后面的n-2个元素比较选出整个数组第二小的元素。以此类推,直到对第n-1个元素执行完这个操作。此时整个数组完成从小到大的排序。
Java代码实现如下:
public void SelectionSort(Comparable arr[],int n){for(int i=0;i<n;i++){int min = i;for(int j=i+1;j<n;j++)if(arr[j].compareTo(arr[min])<0)min = j;swap(arr, i, min);}}public void SelectionSort2(Comparable arr[],int n){for(int i=1;i<n;i++){Comparable e = arr[i];int j;for(j=i;j>0&&(arr[j-1].compareTo(e)>0);j--){arr[j] = arr[j-1];}arr[j]=e;}}private void swap(Comparable arr[],int i,int j){Comparable tmp = arr[i];arr[i] = arr[j];arr[j] = tmp;}
二、插入排序基本思想:假设第一个元素是有序的,则从第二个元素开始排序,将第二个元素插入到相对于第一个元素大小的位置,这样将第二个元素并入有序区间,第三个到第n个元素不断的重复这个过程。最后完成了排序的过程。
Java代码如下:
public void sort(Comparable arr[],int n){/** * 插入排序第一个相当于有序的从第二个开始插 */for(int i = 1;i<n;i++){for(int j=i;j>0;j--){if(arr[j].compareTo(arr[j-1])<0)swap(arr,j,j-1);elsebreak;}}}
阅读全文
0 0
- 排序算法(一) 选择排序
- 排序算法《一》冒泡排序
- 排序算法一 冒泡排序
- 排序算法(一):插入排序
- 一、排序算法 归并排序
- 排序算法一:插入排序
- 排序算法一:冒泡排序
- 排序算法一:冒泡排序
- 排序算法(一)-希尔排序
- 排序算法一:冒泡排序
- 排序算法(一):冒泡排序
- 排序算法一:快速排序
- 排序算法一:堆排序
- 排序算法(一)-冒泡排序
- 排序算法:(一)快速排序
- 排序算法(一)
- 排序算法(一)
- 排序算法(一)
- word用快捷键插入日期和时间
- 【javascript】2017-9-12 腾讯笔试小Q升序算法
- Oracle的column命令详解
- 使用FlyMcu将hex文件下载到智芯一号步骤
- caffe初始化-Xavier
- 排序算法(一)
- python中运算符“重载”
- 切蛋糕问题
- js中的this和函数的调用
- iOS后台运行模式(background execution mode)
- 贝叶斯拼写检查器(python)
- Android 下载网络图片保存到本地
- bellman-ford 模板
- Go语言学习之sync包(临时对象池Pool、互斥锁Mutex、等待Cond)(the way to go)