C++学习日记/4类排序算法
2017-11-18 09:50
148 查看
#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; 4000 //再测试 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); }
欢迎指出错误的地方,因为是学习过程中的原代码,没有太多算法解释
相关文章推荐
- C++学习日记
- C++学习日记5——模板篇的静态和运算符重载
- C/C++ 学习日记第一棒(数据类型)
- C++学习日记
- C++学习日记
- C++学习日记
- C++ 学习日记
- 2016年06月16日学习日记 c++第二讲
- c++学习日记 加virtual和不加virtual的区别
- C++学习日记和心得(二)(新手帖,高手勿笑)
- 我的C++学习日记——变量和基本类型(一)
- C++学习日记8——类对象和类指针的区别
- C++学习之类的使用(排序算法)
- C++学习日记2015.12.25
- C++学习日记13——递归、内联、函数重载、变量的作用域和存储类型
- C++学习日记
- 【学习日记3】c++开始&nbsp;我要做…
- 各种排序算法学习整理 C++实现
- c++学习日记 12-3
- C++学习日记(容器)