排序(选择排序 ,冒泡排序,归并排序)

//选择排序 简单排序 不稳定

//如果有n个值进行排序 则需要n-1趟

//每一趟具体是将待排序序列中最小值找到 再将其和待排序序列的第一个值进行交换 (每一趟我们要找到的是最小值的位置 而不是最小值是多少)

void Select_Sort(int arr\[\], int len)

{

for (int i = 0; i < len-1;i++) //趟数

{

int min = i;

for (int j = i + 1; j < len;j++)//控制的是这一趟中对待排序序列值的遍历 从而找到待排序序列最小值所在位置

{

if (arrj < arrmin)

min = j;

}

if (min != i)//判断待排序序列最小值是否与第一个值相等

{

int tmp = arrmin;

arrmin = arri;

arri = tmp;

}

}

}

//冒泡排序 时间复杂度o(n~2) 空间复杂度 O(1)

//如果有n个值进行排序 则需要n-1趟 简单排序 稳定

// 每一趟都从开始位置从左向右遍历 两两比较 如果左边值大于右边值 则交换 (每趟都可以将排序序列中的最大值通过两两比较交换的方式,蠕动到最后)

void Bubble_Sort(int arr\[\], int len)

{

for (int i = 0; i < len - 1; i++) //趟数

{

for (int j = i ; j < len-1-I; j++)//控制的是这一趟中对雨待排序序列从左向右的两两比较取值的过程

{

if (arrj >= arrj + 1)//两两比较时 如果左边值>右边值 交换

{

int tmp = arrj;

arrj = arrj + 1;

arrj + 1 = tmp;

}

}

}

}

//优化 时间复杂度 最坏O(n~2) 最好 O(n)

void Bubble_Sort(int arr\[\], int len)

{

bool tag = true;

for (int i = 0; i < len - 1; i++) //趟数

{

for (int j = i; j < len - 1 - I; j++)//控制的是这一趟中对雨待排序序列从左向右的两两比较取值的过程

{

if (arrj >= arrj + 1)//两两比较时 如果左边值>右边值 交换

{

int tmp = arrj;

arrj = arrj + 1;

arrj + 1 = tmp;

tag = false;

}

}

if (tag)

return;

}

}

//归并排序 分治

//归并排序 两个有序组合并成一个有序组的函数

void Merge(int arr\[\], int left, int mid, int right)

{

//left, mid mid+1, right

int* brr = (int*)malloc(right - left + 1);

if (NULL == brr)

exit(EXIT_FAILURE);

int i = left;

int j = mid + 1;

int k = 0;//指向brr中接收值的格子下标

while (i <= mid && j <= right)

{

if (arri <= arrj)

{

brrk++ = arri++;

//i++;

//k++;

}

else

{

brrk++ = arrj++;

}

}

while (i <= mid)

brrk++ = arri++;

while (j <= right)

brrk++ = arrj++;

for (int w = left; w <= right; w++)

arrw = brrw - left;

}

//归并排序 递归分函数实现

void Divide(int arr\[\], int left, int right)

{

if (left >= right)

{

return; //3 13

}

int mid = (left + right) / 2;

Divide(arr, left, mid);//分好的左边组的范围 left, mid

Divide(arr, mid + 1, right);//分好的右边组的范围 mid+1, right

Merge(arr, left, mid, right);

}

//归并排序 递归实现方法

void Merge_Sort(int arr\[\], int len)

{

//执行分 递归函数

//divide merge

Divide(arr, 0, len - 1);

}

相关推荐
无限码力19 分钟前
华为非AI方向笔试真题【工厂落点最小加权路程】
算法·华为·华为非ai方向笔试真题·华为笔试真题·华为最新笔试真题·华为笔试题库
residual_fan25 分钟前
数据缺失填补算法之CUR-Estimator
算法·数据挖掘·数据分析
wabs66631 分钟前
关于二叉树【力扣107.二叉树的层序遍历II的思考】
数据结构·c++·算法·leetcode·二叉树·层序遍历
一切皆是因缘际会1 小时前
资源的适配
大数据·人工智能·算法
小七在进步1 小时前
数据结构:非比较排序:计数排序
数据结构
鲸能云1 小时前
【智慧能源】源储调售一体化架构与 EMS 滚动调度算法实践 —— 工商业光储收益提升 22% 的技术拆解
算法·架构·能源
一木 之林1 小时前
四、STL 容器与数据结构(进阶)(二)
数据结构·c++·哈希算法
双翌视觉1 小时前
曝光调不对,算法全白费:机器视觉的曝光三态解析
人工智能·算法·计算机视觉
ysu_03141 小时前
02-单链表完全指南
c语言·数据结构·算法·leetcode
生态学者2 小时前
香港理工大学Nature Communications:沿海塑料际古菌组特征及生态影响
大数据·人工智能·算法·r语言·微信公众平台