C++学习日记/4类排序算法
来源:互联网 发布:雨人软件 编辑:程序博客网 时间:2024/06/08 14:50
#include <iostream>using namespace std;void Swap(int& a, int& b){ int tmp = a; a = b; b = tmp;}void print(int* arr, int len){ for(int i = 0; i < len; i++){ cout<<arr[i]<<", "; } cout<<endl;}void sort1(int *arr, int len){ bool flag; for(int i = 0; i < len; i++){ flag = true; for(int j = 1; j < len-i; j++){ if(arr[j-1] > arr[j]){ Swap(arr[j-1], arr[j]); flag = false; } } if(flag){ break; } }}void sort2(int* arr, int len){ bool flag; for(int i = 0; i < len; i++){ flag = true; for(int j = len-1; j > i; j--){ if(arr[j] < arr[j-1]){ Swap(arr[j], arr[j-1]); flag = false; } } if(flag){ break; } }}void sort3(int* arr, int len){ int Min; int index; bool flag; for(int i = 0; i < len; i++){ Min = arr[i]; index = i; flag = false; for(int j = i; j < len; j++){ if(j == i){ continue; } if(arr[j] < Min){ Min = arr[j]; index = j; flag = true; } } if(flag){ Swap(arr[i], arr[index]); } }}int get_index(int* arr, int left, int right){ int index = arr[left]; while(left < right){ while(left<right && arr[right]>index){ right--; } if(left < right){ //交换的前提 Swap(arr[left], arr[right]); left++; //减去和之前交换过index小的数再比较一次 } while(left<right && arr[left]<=index){ left++; } if(left < right){ Swap(arr[left], arr[right]); right--; //减去和之前交换过index小的数再比较一次 } } return left;}void quick_sort(int* arr, int left, int right){ int index; if(left < right){ index = get_index(arr, left, right); quick_sort(arr, index+1, right); quick_sort(arr, left, index-1); }else{ return; }}int main(){ //定义一维数组长度 const int len = 10; //定义arr1一维数组 int arr1[len] = {3,1,2,4,5,0,9,8,6,7}; //sort3 测试 print(arr1, len); sort3(arr1, len); print(arr1, len); //sort2() int arr2[len] = {3,1,2,4,5,0,9,8,6,7}; print(arr2, len); sort2(arr2, len); print(arr2, len); //sort1() int arr3[len] = {3,1,2,4,5,0,9,8,6,7}; print(arr3, len); sort1(arr3, len); print(arr3, len); cout<<"--------------------------------------"<<endl; //再测试 int arr_0[len] = {0,1,2,3,4,5,6,7,8,9}; print(arr_0, len); sort1(arr_0, len); print(arr_0, len); int arr_1[len] = {0,1,2,3,4,5,6,7,8,9}; print(arr_1, len); sort2(arr_1, len); print(arr_1, len); int arr_2[len] = {0,1,2,3,4,5,6,7,8,9}; print(arr_2, len); sort3(arr_2, len); print(arr_2, len); cout<<"-------------------------------------"<<endl; //再测试 int arr_a[len] = {10,9,8,7,6,5,4,3,2,1}; print(arr_a, len); sort1(arr_a, len); print(arr_a, len); int arr_b[len] = {10,9,8,7,6,5,4,3,2,1}; print(arr_b, len); sort2(arr_b, len); print(arr_b, len); int arr_c[len] = {10,9,8,7,6,5,4,3,2,1}; print(arr_c, len); sort3(arr_c, len); print(arr_c, len); cout<<"-------------------------------------"<<endl; //quick_sort()测试 int arr_A[len] = {3,1,2,4,5,0,9,8,6,7}; print(arr_A, len); quick_sort(arr_A, 0, len-1); print(arr_A, len); //再测试 int arr_B[len] = {1,2,3,4,5,6,7,8,9,10}; print(arr_B, len); quick_sort(arr_B, 0, len-1); print(arr_B, len); //最后测试 int arr_C[len] = {10,9,8,7,6,5,4,3,2,1}; print(arr_C, len); quick_sort(arr_C, 0, len-1); print(arr_C, len);}
欢迎指出错误的地方,因为是学习过程中的原代码,没有太多算法解释
阅读全文
0 0
- C++学习日记/4类排序算法
- C++、C#、java算法学习日记03----插入排序
- C++、C#、java算法学习日记04----二分插入排序
- C++、C#、java算法学习日记01---冒泡排序(BubbleSort)
- C++、C#、java算法学习日记02----选择排序(SelectSort)
- C++、C#、java算法学习日记05----希尔排序(ShellSort)
- C++、C#、java算法学习日记06----堆排序思想(HeapSort)
- C++、C#、java算法学习日记07----堆排序(HeapSort)
- 算法学习日记 字典法排序
- 算法学习日记 -----链表以及箱子排序算法
- 高级算法日记4:查找与排序
- C日记——基本的排序算法
- Linux C学习笔记-排序算法4-快速排序
- 算法导论学习日记(4)插入排序的递归版本
- 算法导论学习日记(1)--插入排序
- 算法导论学习日记(2)--选择排序
- 算法导论学习日记(3)--合并排序
- 算法导论学习日记(6)冒泡排序
- 通过Json格式将数据传给服务端
- 删除字符数组中重复的元素
- 深入理解JVM性能调优
- spring事务传播行为类型的常量含义(翻译)
- Spring 对JDBC操作(实现增删改查,批量添加功能)
- C++学习日记/4类排序算法
- linux系统下安装jdk
- 使用react router V4(react-router-dom)遇到的一些问题
- 树莓派
- 关于行内元素能否设置宽高的问题
- FATAL: Module pmouse not found.
- 支持向量机SVM-机器学习ML
- Linux学习之shell script
- MVP实现购物车功能