排序算法

1、冒泡排序:
原理:从数组的第一个位置开始两两比较array[index]和array[index+1],如果array[index]大于array[index+1]则交换array[index]和array[index+1]的位置,止到数组结束;
从数组的第一个位置开始,重复上面的动作,止到数组长度减一个位置结束;
从数组的第一个位置开始,重复上面的动作,止到数组长度减二个位置结束;
代码:

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

2、选择排序:
原理:选择一个值array[0]作为标杆,然后循环找到除这个值外最小的值(查找小于标杆的最小值),交换这两个值,这时最小值就被放到了array[0]上,然后再将array[1]作为标杆,从剩下未排序的值中找到最小值,并交换这两个值。

代码:

for(int i=0;i<array.length;i++){int index = i;for(int j=i+1;j<array.length;j++){if(array[j] < array[index]){index = j;}}

3、插入排序:
原理:插入排序的思想是数组是部门有序的,然后将无序的部分循环插入到已有序的序列中
代码:

public static void insertSort(int [] array){for(int out=1;out<array.length;out++){int temp = array[out];//被标记的值或者说是当前需要插入的值int in = out;//如果轮循值大于被标记值则往后移while( in > 0 && temp < array[in - 1]){array[in] = array[in - 1]; in -- ;}//将被标记值插入最终移出的空位置array[in] = temp;}}

4、快速排序:
原理:
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-完成的时候,此时令循环结束)。
代码:

void Qsort(int a[], int low, int high)
{
    if(low >= high)
    {
        return;
    }
    int first = low;
    int last = high;
    int key = a[first];/*用字表的第一个记录作为枢轴*/
 
    while(first < last)
    {
        while(first < last && a[last] >= key)
        {
            --last;
        }
 
        a[first] = a[last];/*将比第一个小的移到低端*/
 
        while(first < last && a[first] <= key)
        {
            ++first;
        }
         
        a[last] = a[first];    
/*将比第一个大的移到高端*/
    }
    a[first] = key;/*枢轴记录到位*/
    Qsort(a, low, first-1);
    Qsort(a, first+1, high);
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 总结一下常见的排序算法。 排序分内排序和外排序。内排序:指在排序期间数据对象全部存放在内存的排序。外排序:指在排序...
    jiangliang阅读 1,369评论 0 1
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,768评论 0 33
  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 5,214评论 0 52
  • 以前有一段时间, 老是替学中文的歪果仁朋友们担忧, 中文里好多量词啊, 歪果仁能学得过来吗?中文里的量词太多了, ...
    玄鸟羽飞阅读 1,793评论 1 1
  • wC#编程初级篇(2015版本) C#编程中级篇(2015版本) C#编程高级篇(2015版本) 可以关注链接里面...
    Gabo阅读 724评论 3 51