排序

1、排序与查找的关系

排序是查找的前提。

排序时,要考虑时间、空间、稳定性。

2、插入排序

3、选择排序

4、归并排序

5、快速排序

先找到某一个元素(假定是第一个元素)的最终位置,然后把数据分为两半。然后在两半分别再找到某一个元素的最终位置……——递归

经过一次排序,只能确定一个元素的最终位置,其他元素仍然是无序的。

例:

9 0 8 10 -5 2 13 7

9:
l:比它大的赋值,比它小的移动;
h:比它小的赋值,比它大的移动。

5 2 6 8 4 3 7
第一次:
3 2 4 5 8 6 7

程序:

#include <stdio.h>

void QuickSort(int *, int, int);
int FindPos(int *, int, int);

int main(void)
{
    int a[6] = {2, 1, 0, 5, 4, 3};
    int i = 0;

    QuickSort(a, 0, 5); 
    // 第2个参数:第1个元素的下标 
    // 第3个参数:最后一个元素的下标 

    for(i=0; i<6; ++i)
    {
        printf("%d ", a[i]);
    }
    printf("\n");

    return 0;
}

void QuickSort(int * a, int low, int high)
{
    int pos = 0;

    if(low < high)
    {
        pos = FindPos(a, low, high); // 找到该元素的最终位置 
        QuickSort(a, low, pos-1);
        QuickSort(a, pos+1, high);
    }
}

int FindPos(int * a, int low, int high)
{
    int val = a[low];

    while(low < high)
    {
        while(low < high && a[high] >= val)
        {
            --high;
        }
        a[low] = a[high];
    
        while(low < high && a[low] <= val)
        {
            ++low;
        }
        a[high] = a[low];
    } 
    // while结束之后,low和high一定是相等的
    // 这个值就是val的最终位置 

    a[low] = val;

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

推荐阅读更多精彩内容

  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 5,222评论 0 52
  • 概述:排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    每天刷两次牙阅读 3,747评论 0 15
  • 排序的基本概念 在计算机程序开发过程中,经常需要一组数据元素(或记录)按某个关键字进行排序,排序完成的序列可用于快...
    Jack921阅读 1,466评论 1 4
  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入到已排序好...
    依依玖玥阅读 1,286评论 0 2
  • 落木萧萧凋朱颜 独赏孤芳空自怜 西风送辞南归燕 何日春回复双飞
    星尘梦羽阅读 345评论 7 5