C++ 三种常见排序法,冒泡排序,选择排序,快速排序
C++ 三种常见排序法
冒泡排序,选择排序,快速排序
#include<iostream>
using namespace std;
/*
打印数组中的所有元素
第一个参数为要传的数组,第二个为被传数组的长度
*/
void print(int arr[], int length){
for(int j = 0; j < length; j++){
cout<<arr[j] <<" ";
}
cout<<endl;
}
/*
交换数组中的两个元素的位置
第一个参数为要交换的数组,第二个为要调换值的下标1第三个为要调换的下标2
*/
void swap(int array[], int a, int b){
int s = array[a];
array[a] = array[b];
array[b] = s;
}
/*
冒泡排序
第一个参数为要传的数组,第二个为被传数组的长度
*/
void bubbleSort(int array[], int length){
for (int i = 0; i < length; i++){
for (int j = i + 1; j < length; j ++ ){
if (array[i] > array[j]){
swap(array, i, j);
}
}
}
}
/*
选择排序
第一个参数为要传的数组,第二个为被传数组的长度
*/
void selectSort(int array[], int length){
for (int i = 0; i < length; i++){
int bufferIndex = i;
for (int j = i + 1; j < length; j ++ ){
if (array[j] < array[bufferIndex]) {
bufferIndex = j;
}
}
swap(array,i,bufferIndex);
}
}
/*
快速排序
第一个参数为要传的数组,第二个为要排序的起始位置,第三个为要排序的终止位置
*/
void quickSort(int array[], int start, int end){
if(end <= start){
return;
}
int left = start;
int right = end;
int pivot = array[left];
while (left < right){
//计算最右边的最小值
while (left < right && array[right] >= pivot){
right --;
}
//把最右边的最小值赋值给左边
array[left] = array[right];
//计算最左边的最大值
while (left < right && array[left] <= pivot){
left ++;
}
//把最左边的最大值赋值给右边
array[right] = array[left];
}
array[left] = pivot;
quickSort(array, start, left - 1);//递归排序左半部分
quickSort(array, left + 1, end);//递归排序右半部分
}
int main(){
// 冒泡排序法
int arr1[] = {
4,5,2,3,1};
print(arr1, 5);
bubbleSort(arr1, 5);
print(arr1,5);
// 选择排序法
int arr2[] = {
4,5,2,3,1};
print(arr2, 5);
selectSort(arr2, 5);
print(arr2, 5);
// 快速排序法
int arr3[] = {
4,5,2,3,1};
print(arr3, 5);
//最大长度为下标长度
quickSort(arr3, 0, 4);
print(arr3, 5);
return 0;
}
