排序算法笔记

简介: 排序算法笔记

简单插入排序

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

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);
}
目录
相关文章
|
1月前
|
算法 搜索推荐 Java
数据结构与算法(Java篇)笔记--希尔排序
数据结构与算法(Java篇)笔记--希尔排序
|
1月前
|
机器学习/深度学习 存储 算法
【算法沉淀】刷题笔记:并查集 带权并查集+实战讲解
【算法沉淀】刷题笔记:并查集 带权并查集+实战讲解
|
1月前
|
算法 搜索推荐 Java
数据结构与算法(Java篇)笔记--快速排序
数据结构与算法(Java篇)笔记--快速排序
|
1月前
|
机器学习/深度学习 算法 搜索推荐
数据结构与算法(Java篇)笔记--归并排序
数据结构与算法(Java篇)笔记--归并排序
|
1月前
|
算法 搜索推荐 Java
数据结构与算法(Java篇)笔记--选择排序
数据结构与算法(Java篇)笔记--选择排序
|
2月前
|
存储 搜索推荐 算法
【排序】软考笔记:简要回顾下常见的几种排序算法
【排序】软考笔记:简要回顾下常见的几种排序算法
43 0
【排序】软考笔记:简要回顾下常见的几种排序算法
|
2月前
|
存储 算法 Java
数据结构与算法笔记(一)
数据结构与算法笔记(一)
104 0
|
3月前
|
算法
链表算法笔记
链表算法笔记
22 0
|
3月前
|
XML 算法 前端开发
北大陈斌Python算法笔记(二)
北大陈斌Python算法笔记(二)
35 0
|
3月前
|
算法 前端开发 Java
北大陈斌Python算法笔记(一)
北大陈斌Python算法笔记(一)
43 0