各大排序算法

#include <iostream>
#include <algorithm>
#include <string>
using namespace std;

void insert_sort(int a[],int n){
    int h,i,j,temp;
    for(h=n/2; h>0; h/=2) {
        for (i = h; i < n; i+=h) {
            temp = a[i];
            for (j = i - h; a[j] > a[j + h] && j >= 0; j-=h)
                swap(a[j], a[j + h]);
            a[j+h]=temp;
        }
    }
}

void bubble_sort(int a[],int  len){
    int i= 0, j = 0 , exchange = 0 ;
    for(i=1 ; i < len ; i++){
        for(j = 0 ; j < len-i ; ++j )
        {
            if(a[j+1] < a[j]){
                swap(a[j],a[j+1]);
                exchange=1;
            }
        }
        if( exchange != 1 ) return;
    }
}

void quick_sort(int a[],int low,int high){
    int i,j,pivot;
    if(low < high)
    {
        pivot = a[low];
        i=low , j = high;
        while( i < j ){
            while(i<j && a[j]>=pivot) j--;
            if(i<j) a[i++]=a[j];
            while(i<j && a[i]<= pivot) i++;
            if(i < j) a[j--] = a[i];
        }
        a[i]=pivot;
        quick_sort(a,low,i-1);
        quick_sort(a,i+1,high);
    }
}

void select_sort(int a[], int len) {
    int i, j, min, temp;
    for(i=0; i < len-1 ; ++i)
    {
        min = i;
        for(j=i+1; j < len; ++j)
            if(a[min] > a[j])
                min=j;
        swap(a[min],a[i]);
    }
}

int heapSize= 0;
int Left(int index){ return ( (index<<1)+1 ); }
int Right(int index){ return ((index << 1)+2) ; }

void max_heapify(int arr[], int start, int end) {
    //建立父節點指標和子節點指標
    int dad = start;
    int son = dad * 2 + 1;
    while (son <= end) { //若子節點指標在範圍內才做比較
        if (son + 1 <= end && arr[son] < arr[son + 1]) //先比較兩個子節點大小,選擇最大的
            son++;
        if (arr[dad] > arr[son]) //如果父節點大於子節點代表調整完畢,直接跳出函數
            return;
        else { //否則交換父子內容再繼續子節點和孫節點比較
            swap(arr[dad], arr[son]);
            dad = son;
            son = dad * 2 + 1;
        }
    }
}

void heap_sort(int arr[], int len) {
    //初始化,i從最後一個父節點開始調整
    for (int i = len / 2 - 1; i >= 0; i--)
        max_heapify(arr, i, len - 1);
    //先將第一個元素和已经排好的元素前一位做交換,再從新調整(刚调整的元素之前的元素),直到排序完畢
    for (int i = len - 1; i > 0; i--) {
        swap(arr[0], arr[i]);
        max_heapify(arr, 0, i - 1);
    }
}

int main(int argc ,char** argv)
{
    int a[]={7,30,5,2,51,4,6};
    //insert_sort(a,7);
    //bubble_sort(a,7);
    //quick_sort(a,0,7);
    //select_sort(a,7);
    heap_sort(a,7);
    for (int i = 0; i < 7 ; ++i) {
        cout<<a[i]<<" "<<endl;
    }
    cout<<2500<<endl;
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值