1.分治思想
选取基数,通过交换,将小的分左边一组,大的分右边一组,基数放在中间
2.递归思想
对小的或大的一组重复进行分类,直到组的大小为1或0
C++ main.cc
#include <iostream>
using namespace std;
const int N=12;
int arr[N] = {3,7,9,2,6,1,5,4,8,19,15};
void swap(int * arr, int i, int j)
{
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
//输入左下标,右下标
//返回中间元素位置
int part(int arr[], int left,int right)
{
int middle = left;
int base = arr[left];
for(int i = left+1;i <= right;i++)
{
if(arr[i] < base)
{
swap(arr,i,middle+1);
middle++;
}
}
swap(arr,left,middle);
for(int i = 0; i<N;i++)
{
cout << arr[i] << ' ';
}
cout << endl;
return middle;
}
void quick_sort(int arr[],int left,int right)
{
if(left < right)
{
int index = part(arr,left,right);
quick_sort(arr, left, index-1);
quick_sort(arr, index+1, right);
}
else
{
return;
}
}
int main(/**argc **argv[]*/)
{
for(int i = 0; i<N;i++)
{
cout << arr[i] << ' ';
}
cout << endl;
//int num = part(arr,0,N-1);
quick_sort(arr,0,N-1);
for(int i = 0; i<N;i++)
{
cout << arr[i] << ' ';
}
//cout << num << endl;
cout << endl;
return 0;
}
CMakeLists.txt
cmake_minimum_required(VERSION 3.5)
project(quick_sort)
#aux_source_directory(SOURCE ./)
add_executable(quick_sort main.cc)
#target_link_library(quick_sort)