数据结构——排序

1|0排序

1|1简单排序

  1. 选择排序
  2. 冒泡排序
  3. 插入排序

1|0选择排序

排序思想:

  1. 将排序序列分为已经有序和待排序两部分
  2. 每次从待排序的序列中选出最小的放到已排序末尾

性质:不稳定

void sort1(int a[], int n) { for (int i = 0; i < n - 1; i ++ ){ //选择n-1次 int min_id = i; //默认当前待排序的第一个为最小 for (int j = i; i < n; j ++ ) if (a[j] < a[min_id]) min_id = j; //找到最小值, 交换: swap(a[i], a[min_id]); } }

1|0冒泡排序

排序思想:
反复比较两两相邻元素,若不符合顺序要求,则交换相邻元素,直至有序

性质: 稳定

void sort2(int a[], int n) { for (int i = 0; i < n - 1; i ++ ){ int flag = 1; for (int j = 0; j < n - i - 1; j ++ ) if (a[j] > a[j + 1]) swap(a[j], a[j + 1]), flag = 0; if (flag) break; } }

1|0插入排序

排序思想:

  1. 将序列分为待排序和已排序两部分
  2. 每次从待排序的部分选择一个插入到已排序部分(这里采用不断向前渗透的方法)
void sort3(int a[], int n) { for (int i = 2; i <= n; i ++ ){ a[0] = a[i]; for (int j = i; a[j] < a[j - 1]; j -- ) swap(a[j], a[j - 1]); } }

1|2先进排序

1|0快速排序

排序思想:

  1. 对待排序序列进行划分
  2. 对前半部分排序
  3. 对后半部分排序

性质:不稳定

划分:
从序列中选择一个元素作为划分依据,将序列分为前后两部分

//划分: int Part(int a[], int l, int r) { int tmp = a[l]; while (l < r){ while (l < r && a[r] >= tmp) r --; a[l] = a[r]; while (l < r && a[l] <= tmp) l ++; a[r] = a[l]; } a[l] = tmp; return l; } //排序: void sort3(int a[], int l, int r) { if (l >= r) return; int k = Part(a, l, r); sort3(a, l, k - 1); sort3(a, k + 1, r); return; }

1|0堆排序

堆:完全二叉树
大顶堆:父节点的值大于等于子节点的值
小顶堆: 父节点的值小于等于子节点的值

堆调整

void Aheap(int s, int n) { int i = s; while (2 * i + 1 < n){ int j = 2 * i + 1; if (j + 1 < n && heap[j + 1] > heap[j]) j ++; if (heap[i] >= heap[j]) break; swap(heap[i], heap[j]); i = j; } }

建堆

void Build(int n) { for (int i = n / 2 - 1; i >= 0; i -- ) Aheap(i, n); }

排序

void HeapSort(int n) { Build(n); for (int i = n - 1; i > 0; i -- ){ swap(heap[0], heap[i]); Aheap(0, i); } }

__EOF__

本文作者lhqwd
本文链接https://www.cnblogs.com/lhqwd/p/15768578.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   lhqwd  阅读(37)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示