java排序算法总结

来源:互联网 发布:城市安防监控网络 编辑:程序博客网 时间:2024/04/30 06:37

java 常见的排序算法:冒泡排序,快速排序,选择排序等;

1.冒泡排序:概念--重复的比较要排序的序列,每次比较相邻的两个元素,直到排序完成。

       排序步骤如下:

  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
  3. 针对所有的元素重复以上的步骤,除了最后一个。
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

   code example:

public class BubbleSort{    public void sort(int[] a)    {        int temp = 0;        for (int i = a.length - 1; i > 0; --i)        {            for (int j = 0; j < i; ++j)            {                if (a[j + 1] < a[j])                {                    temp = a[j];                    a[j] = a[j + 1];                    a[j + 1] = temp;                }            }        }    }}

2.快速排序:它的基本思想---通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序。

一趟快速排序的算法是:(摘自百科)
1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;
2)以第一个数组元素作为关键数据,赋值给key,即key=A[0];
3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]和A[i]互换;
4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]和A[j]互换;
5)重复第3、4步,直到i=j; (3,4步中,没找到符合条件的值,即3中A[j]不小于key,4中A[i]不大于key的时候改变j、i的值,使得j=j-1,i=i+1,直至找到为止。找到符合条件的值,进行交换的时候i, j指针位置不变。另外,i==j这一过程一定正好是i+或j-完成的时候,此时令循环结束)。

code example:

public static void quickSort(int[] numbers, int start, int end) {       if (start < end) {           int base = numbers[start]; // 选定基准值           int temp; // 记录临时中间值           int i = start, j = end;           do {               while ((numbers[i] < base) && (i < end))                   i++;               while ((numbers[j] > base) && (j > start))                   j--;               if (i <= j) {                   temp = numbers[i];                   numbers[i] = numbers[j];                   numbers[j] = temp;                   i++;                   j--;               }           } while (i <= j);           if (start < j){               quickSort(numbers, start, j);         }          if (end > i) {              quickSort(numbers, i, end);          }     }   } 

3.选择排序:它的工作原理是每一次从待排序的数据中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

   排序步骤:

       1.首先从未排序序列中找到最小的元素,放到排序序列的起始位置;

       2.接着再从剩下的未排序序列中找到最小元素,放到排序序列的末尾,以此类推直到排序结束;

code example:

public static void selectSort(int[]a){    int minIndex=0;    int temp=0;    if((a==null)||(a.length==0))        return;    for(int i=0;i<a.length-1;i++)    {        minIndex=i;//无序区的最小数据数组下标        for(intj=i+1;j<a.length;j++)        {            //在无序区中找到最小数据并保存其数组下标            if(a[j]<a[minIndex])            {                minIndex=j;            }        }        if(minIndex!=i)        {            //如果不是无序区的最小值位置不是默认的第一个数据,则交换之。            temp=a[i];            a[i]=a[minIndex];            a[minIndex]=temp;        }    }}






0 0
原创粉丝点击