排序算法(一)

来源:互联网 发布:自动换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;}}}



原创粉丝点击