C++实现 排序算法

1. 冒泡排序 

#include <iostream>
using namespace std;
 
int main()
{
   int n,a[1000];//个数及数组
   cin >> n;
   for (int i = 0; i < n; i++){
   cin >>a[i];
   }
   for (int i =0; i < n-1;i++){
   for (int j=1;j<n-i;j++){
   if (a[j-1] > a[j]){
   int temp = a[j-1];
   a[j-1] = a[j];
   a[j] = temp;
   }
   }
   }
   for (int i=0; i<n; i++){
   cout<<a[i]<<endl;
   }
   return 0;

}


2. 奇偶排序

#include <iostream>
using namespace std;
 
int main(){
//输入 
   int a[10];
   for (int i = 0; i < 10; i++){
   cin >> a[i];
   }
   //排序 
   int l = 0, r = 9;
   while (l <= r) {
   bool leftisOdd = a[l] % 2 == 1;
   bool rightisEven = a[r] % 2 == 0;
   if(leftisOdd){
   l++;
   } else if (rightisEven) {
   r--;
   } else if (!leftisOdd && !rightisEven) {
   int temp = a[l];
   a[l] = a[r];
   a[r] = temp;
   }
   }
   // 左边冒泡
   int start = 0, end = l;
   for (int i = start; i < end -1; i++){
   for (int j = start + 1; j < start + end - i; j++){
   if (a[j-1] > a[j]) {
   int temp = a[j-1];
   a[j-1] = a[j];
   a[j] = temp;
   }
   }
   }
   // turns to right
   start = l, end = 10;
   for (int i = start; i < end -1; i++){
   for (int j = start + 1; j < start + end - i; j++){
   if (a[j-1] > a[j]) {
   int temp = a[j-1];
   a[j-1] = a[j];
   a[j] = temp;
   }
   }
   }
   for (int i=0; i<10; i++){
   cout<<a[i]<<' ';
   }
   return 0;


3.堆排序

//堆排序主函数
void HeapSort(int a[], int n){
    for(int i= n/2-1;i>=0;i--)
        MaxHeapFixDown(a,i,n);
    for(int i=n-1;i>=1;i--){
       swap(a[i],a[0]);
       MaxHeapFixDown(a,0,i);
    }
}

//构造最小堆(降序)
void MaxHeapFixDown(int a[], int i, int n){
    int j = 2*i+1;
    int temp = a[i];
    while(j<n){
        if(j+1<n&&a[j]>a[j+1])
            ++j;
        if(temp<a[j])
            break;
        else{
            a[i]=a[j];
            i=j;
            j=2*i+1;
        }
    }
    a[i]=temp;

}


//最大堆(升序排序)
void MaxHeapFixDown2(int a[], int i, int n){
    int j = 2*i+1;
    int temp = a[i];
    while(j<n){
        if(j+1<n&&a[j]<a[j+1])
            ++j;
        if(temp>a[j])
            break;
        else{
            a[i]=a[j];
            i=j;
            j=2*i+1;
        }
    }
    a[i]=temp;
}


//最大堆(升序排序)
void MaxHeapFixDown3(int a[], int i, int n){
    int j = 2*i+1;
    int temp = a[i];
    while(j<n){
        if(j+1<n&&a[j]<a[j+1]){
swap(a[j],a[j+1]);
}
        if(temp>a[j])
            break;
        else{
            a[i]=a[j];
            i=j;
            j=2*i+1;
        }
    }
    a[i]=temp;

}


3. 斐波那契

function<int(int)> fib = [&fib](int) {return n<=2 ? 1:fib(n-1)+fib(n-2);};

cout << fib(4) << endl;

function <int(int)> 表示返回值为int,有一个int参数的函数。

猜你喜欢

转载自blog.csdn.net/mmm305658979/article/details/79782126