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