基本排序演算法(C)

來源:互聯網
上載者:User
/* Note:Your choice is C IDE */#include "stdio.h"void main(){    int i,j,temp,d,a[10];    printf("請輸入數組的元素:\n");    for(i=0; i<10; i++)        scanf("%d",&a[i]);    /*冒泡排序*/    for(i=9; i>=1; i--)        for(j=0; j<=i-1; j++)            if(a[j+1]<a[j])            {                temp=a[j];                a[j]=a[j+1];                a[j+1]=temp;            }    printf("冒泡排序後:\n");    for(i=0; i<10; i++)        printf("%8d",a[i]);    printf("\n");    /*插入排序*/    for(i=1; i<10; i++)    {        temp=a[i];        j=i-1;        while(j>=0&&a[j]>temp)        {            a[j+1]=a[j];            j--;        }        a[j+1]=temp;    }    printf("插入排序後:\n");    for(i=0; i<10; i++)        printf("%8d",a[i]);    printf("\n");    /*選擇排序*/    /*for(i=0;i<10;i++)    {        int min;        min=a[i];        for(j=i+1;j<10;j++)        {            if(a[j]<min)            {                min=a[j];                temp=a[j];                a[j]=a[i];                a[i]=temp;            }        }    }*/    for(i=0; i<10; i++)    {        int k;        k=i;        for(j=i+1; j<10; j++)        {            if(a[j]<a[k])            {                k=j;            }            if(i!=k)//進一步減少不必要的互換,如果當前值就是剩下數中最小的話。            {                temp=a[i];                a[i]=a[k];                a[k]=temp;            }        }    }    printf("選擇排序後:\n");    for(i=0; i<10; i++)        printf("%8d",a[i]);    printf("\n");    /*希爾排序*/    for(d=10/2; d>=1; d=d/2)    {        for(i=d; i<10; i++)        {            temp=a[i];            j=i-d;            while(j>=0&&a[j]>temp)            {                a[j+d]=a[j];                j=j-d;            }            a[j+d]=temp;        }    }    printf("希爾排序後:\n");    for(i=0; i<10; i++)        printf("%8d",a[i]);    printf("\n");}/*堆排序*/#include "stdio.h"#include "string.h"void HeapAdjust(int R[],int s,int m){    int t,j;    t=R[s];    for(j=2*s+1; j<=m; j=j*2+1)    {        if(j<m&&R[j]<R[j+1]) ++j;        if(!(t<R[j])) break;        R[s]=R[j];        s=j;    }    R[s]=t;}void HeapSort(int R[],int n){    int i,temp;    for(i=n/2-1; i>=0; --i) //建立初始堆,初始堆的時候要依次調整第n/2-1到第0個節點。        HeapAdjust(R,i,n-1);    for(i=n-1; i>0; i--)    {        temp=R[0];        R[0]=R[i];        R[i]=temp;        HeapAdjust(R,0,i-1);//重建堆的時候只要調整第0個節點就可以了。    }}void main(){    int i;    int R[]= {3,12,4,1,9,8,6,5,23,9,90,87,65,456,2,95};    HeapSort(R,16);    for(i=0; i<16; i++)        printf("%d\t",R[i]);}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.