您的位置:首页 > 编程语言 > C语言/C++

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);

}
欢迎指出错误的地方,因为是学习过程中的原代码,没有太多算法解释
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: