排序复习
Posted shawnc24
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序复习相关的知识,希望对你有一定的参考价值。
直接插入排序:O(N2)
void InsertSort(int *a, int size) { for (int i = 0; i < size - 1; i++) { for (int j = i + 1; j > 0; j--) { if (a[j] < a[j - 1]) { int tmp = a[j - 1]; a[j - 1] = a[j]; a[j] = tmp; } } } }
冒泡排序:O(N2)
void BubbleSort(int *a, int size) { for (int i = 0; i < size; i++) { for (int j = 1; j < size-i; j++) { if (a[j] < a[j - 1]) { int tmp = a[j - 1]; a[j - 1] = a[j]; a[j] = tmp; } } } }
希尔排序 O(N2) 设置步长,优化后的插入排序
void ShellSort(int *a, int size) { int gap = size / 2; while (gap >= 1) { for (int i = 0; i < size; i ++) { for (int j = i + gap; j<size; j = j - gap) { if (a[j] < a[j - gap]) { int tmp = a[j - gap]; a[j - gap] = a[j]; a[j] = tmp; } break; } } gap = gap / 2; } }
简单选择排序 O(N2)
void SelectSort(int *a,int size) { for (int i = 0; i < size; i++) { for (int j = i + 1; j < size; j++) { if (a[j] < a[i]) { int tmp = a[i]; a[i] = a[j]; a[j] = tmp; } } } }
快速排序 logN
void QuickSort(int *a, int size) { if (size <=1) return; //哨兵i 哨兵j int first_val = a[0]; int i = 1, j = size - 1; while (i != j) { //哨兵j开始行动 while (j > i && a[j] >= first_val) { j--; } while (j > i && a[i] < first_val) { i++; } if(i<j) { int tmp = a[i]; a[i] = a[j]; a[j] = tmp; } /*for (int k = 0; k < size; k++) { std::cout << a[k] << std::endl; } std::cout << " ";*/ } if (a[0] > a[j]) { int tmp = a[0]; a[0] = a[j]; a[j] = tmp; } for (int k = 0; k < size; k++) { std::cout << a[k] << std::endl; } std::cout << " "; QuickSort(a, i); //这里很重要 if(i==1) QuickSort(a+i, size-i); else QuickSort(a + i + 1, size - i - 1); }
以上是关于排序复习的主要内容,如果未能解决你的问题,请参考以下文章
前端技能树,面试复习第 53 天—— 手写代码:数据处理 | 排序 | 扁平 | 去重 | 解析 | 分隔
初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段
初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段