排序算法笔记

简介: 排序算法笔记

简单插入排序

选当前数作为要插入的数据,从后往前看是否有比当前还小的, 如果有就进行交换 最后将当前数放入要插入的位置

void insert_sort(int* data , int length){
    int i;
    for(int i = 1 ; i < length - 1; i++){
        int index = data[i];  //哨兵  暂存数据    
        int j;
        for(j = i ; j > 0 && index < data[j-1] ; j--){
            data[j] = data[j-1];
        }
        if(j != i){   // 要插入的数据比前面小  否则没有进行交换直接进入下一次循环
            data[j] = index;
        }
    }
}

选择排序

每次拿当前数作为最小值  , 往后遍历 , 找到比最小值还小的数 , 更新下标 , 最后和当前数进行交换

void select_sort(int *data , int length){
    int i;
    for(int i = 0 ; i < length - 1; i++){
        int min = i;    // 默认当前为最小
        int j;
        for(j = i+1 ; j < length ; j++){   //遍历找到最小的下标
            if(data[j] < data[min])
                min = j;    // 更新最小下标
        }
        if(i != min){    // 如果找到比当前还小就交换
            int temp = data[i];
            data[i] = data[min];
            data[min] = temp;
        }
    }
}

希尔排序:

1. 分组

2. 遍历每个组

3. 组内进行插入排序

// 希尔排序
int shell_sort(int *data , int length){
  int gap = 0; // 分组的跨度
  int j , i;
  for(gap = length/2 ; gap >= 1 ; gap/=2){ //分组的次数
    for(i = gap ; i < length ; i++){  //每次分组之后对组进行遍历
      int temp = data[i];
      for(j = i - gap ; j >= 0&&temp < data[j] ; j = j - gap){//组内循环
          data[j+gap] = data[j];  
      }
      data[j+gap] = temp;
    }
  }
  return 0;
}

快速排序

int sort(int *data , int left , int right){
    if(left > right) return 0;
    int i = left;
    int j = right;
    int key = data[left];  // 哨兵
    while(i < j){
        while(i < j && key < data[j]) j--;   //从又往左找比哨兵小的数
        data[i] = data[j];                    //交换
        while(i < j && key > data[i]) i++;    //从左找比哨兵大的数
        data[j] = data[i];                    // 交换
    }
    // i == j
    data[i] = key;                           // 哨兵归位
    // 递归
    sort(data , left , i - 1);
    sort(data , i + 1 , right);
}
int quick_sort(int *data , int length){
    sort(data , 0 , length - 1);
}
目录
相关文章
|
11月前
|
算法
【❤️算法笔记❤️】-每日一刷-19、删除链表的倒数第 N个结点
【❤️算法笔记❤️】-每日一刷-19、删除链表的倒数第 N个结点
177 1
|
11月前
|
算法 索引
❤️算法笔记❤️-(每日一刷-141、环形链表)
❤️算法笔记❤️-(每日一刷-141、环形链表)
120 0
|
11月前
|
算法
【❤️算法笔记❤️】-(每日一刷-876、单链表的中点)
【❤️算法笔记❤️】-(每日一刷-876、单链表的中点)
126 0
|
11月前
|
算法
【❤️算法笔记❤️】-每日一刷-23、合并 K 个升序链表
【❤️算法笔记❤️】-每日一刷-23、合并 K 个升序链表
115 0
|
11月前
|
存储 算法
【❤️算法笔记❤️】-每日一刷-21、合并两个有序链表
【❤️算法笔记❤️】-每日一刷-21、合并两个有序链表
261 0
|
11月前
|
算法 API 计算机视觉
人脸识别笔记(一):通过yuface调包(参数量54K更快更小更准的算法) 来实现人脸识别
本文介绍了YuNet系列人脸检测算法的优化和使用,包括YuNet-s和YuNet-n,以及通过yuface库和onnx在不同场景下实现人脸检测的方法。
447 1
|
11月前
|
算法
❤️算法笔记❤️-(每日一刷-160、相交链表)
❤️算法笔记❤️-(每日一刷-160、相交链表)
86 1
|
11月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
250 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
11月前
|
数据可视化 搜索推荐 Python
Leecode 刷题笔记之可视化六大排序算法:冒泡、快速、归并、插入、选择、桶排序
这篇文章是关于LeetCode刷题笔记,主要介绍了六大排序算法(冒泡、快速、归并、插入、选择、桶排序)的Python实现及其可视化过程。
152 0
|
11月前
|
算法
❤️算法笔记❤️-(每日一刷-83、删除排序链表中的重复项)
❤️算法笔记❤️-(每日一刷-83、删除排序链表中的重复项)
118 0

热门文章

最新文章