冒泡排序:
时间复杂度为o(n2),算法稳定
void bubble_sort(){
for(int i=0;i<len;i++){
for(int j = len-1;j>i;j--){
if(nums[j]<nums[j-1]){
swap(nums[j],nums[j-1]);
}
}
}
print();
}
快速排序:
一种分治的思想,选取一个轴点,轴点左边的元素都小于它右边都大于它。然后针对每个分区排好序。
时间复杂度o(nlogn),最坏情况下为o(n2),算法不稳定。但无可否认快排是内部排序算法中最优秀的算法
void quick_sort(int begin,int end){
if(begin<=end){
int i =begin;
int j =end;
int pivot = nums[begin];
while(i<j){
while(j>i&&nums[j]>=pivot){
j--;
}
while(j>i&&nums[i]<=pivot){
i++;
}
if(i<j){
swap(nums[i],nums[j]);
}
}
swap(nums[begin],nums[i]);
quick_sort(i+1,end);
quick_sort(begin,i-1);
}
}
测试代码:
#include<bits/stdc++.h>
using namespace std;
class Sort{
private:
int* nums;
int len;
public:
Sort(int* nums,int len){
this->nums=nums;
this->len=len;
}
void print(){
for(int i=0;i<len;i++){
cout<< nums[i] <<" ";
}
cout<<endl;
}
void bubble_sort(){
for(int i=0;i<len;i++){
for(int j = len-1;j>i;j--){
if(nums[j]<nums[j-1]){
swap(nums[j],nums[j-1]);
}
}
}
print();
}
void quick_sort(int begin,int end){
if(begin<=end){
int i =begin;
int j =end;
int pivot = nums[begin];
while(i<j){
while(j>i&&nums[j]>=pivot){
j--;
}
while(j>i&&nums[i]<=pivot){
i++;
}
if(i<j){
swap(nums[i],nums[j]);
}
}
swap(nums[begin],nums[i]);
quick_sort(i+1,end);
quick_sort(begin,i-1);
}
}
};
int main(){
int nums[10]={9,5,1,3,14,7,6,8,2,3};
Sort test(nums,10);
//test.bubble_sort();
test.quick_sort(0,9);
test.print();
}