c语言》排序法

排序法

1.选择排序法

 思路:在自定义函数中定义两个局部变量i,j;

i<数组长度;

j=i+1 j<数组长度;

if(array[i]<array[j]){//if(array[i]<array[j])可省略

int t,

t=array[i];

array[i]=array[j];}

主函数输出:printf("%d",array[i]);

 

//代码:从小到大排序     if (array[i]>array[j])

              从大到大排序     if (array[j]>array[i])

 

#include <stdio.h>

int main(int argc, const char * argv[]) {
    int array[]={1,2,4,6,3,5,0,8,9};//没确定数组长度array[]可用sizeof求出
    int i,j,temp;
    int z=sizeof(array)/sizeof(int);
    for (i=0; i<z; i++) {
        for (j=i+1; j<z; j++) {
            if (array[i]>array[j]) {
                temp=array[i];
                array[i]=array[j];
                array[j]=temp;
                
            }
        }
        printf("%d",array[i]);
    }
    printf("\n");
    return 0;
}

 

2.冒泡排序法

思路:

若数组array元素长度为固定值n,可特设array[n+1]

在条件取下标值为1且小于n+1

for循环

          

    for (i=1; i<n-1; i++) 

 

    for (j=1; j<n+1-i; j++) 

 

    if (array[j]>array[j+1]) 

                t=array[j];

                array[j]=array[j+1]

                array[j+1]=t; 

#include <stdio.h>

int main(int argc, const char * argv[]) {
    int array[11];
    int i,j,t;
    printf("请输入数值:");
    for (i=1; i<11; i++) {
        scanf("%d",&array[i]);
    }
    for (i=1; i<10; i++) {
        for (j=1; j<11-i; j++) {
            if (array[j]>array[j+1]) {
                t=array[j];
                array[j]=array[j+1];
                array[j+1]=t;
            }
        }
    }
    printf("排序后:");
    for (i=1; i<11; i++) {
        printf("%d",array[i]);
    }
    printf("\n");
    return 0;
}

 

思路:

若数组array元素长度为固定值n,可特设array[n]

在条件取下标值为0且小于n

for循环

          

    for (i=0; i<n-1; i++) 

 

    for (j=0; j<n-1-i; j++) 

 

    if (array[j]>array[j+1]) 

                t=array[j];

                array[j]=array[j+1]

                array[j+1]=t; 

 

方法二
#include <stdio.h>

int main(int argc, const char * argv[]) {
    int array[10];
    int i,j,t;
    printf("请输入数值:");
    for (i=0; i<10; i++) {
        scanf("%d",&array[i]);
    }
    for (i=0; i<10-1; i++) {
    for (j=0; j<10-1-i; j++) {
    if (array[j]>array[j+1]) {
                t=array[j];
                array[j]=array[j+1];
                array[j+1]=t;
            }
        }
    }
    printf("排序后:");
    for (i=0; i<10; i++) {
        printf("%d",array[i]);
    }
    printf("\n");
    return 0;
}

 

3.希尔排序

#include <stdio.h>
#include "string.h"
void text(int array[],int n1);
int main(int argc, const char * argv[]) {
    int array[]={9,2,6,4,5,8,0,7,3,1};
    int n1;
    n1=sizeof(array)/sizeof(int);
    printf("请输入排序前的数据:");
    for (int i=0; i<n1; i++) {
        printf("%d",array[i]);
    }
    printf("\n");
    printf("排序后的数据:");
    for (int i=0; i<n1; i++) {
        text(array,n1);
        printf("%d",array[i]);
    }
    printf("\n");
    return 0;
}


void text(int array[],int n1){
    int i,j,x;
    int d=n1/2;
    while (d>=1)
    {
        for (i=d; i<=n1; i++)
        {
            x=array[i];//记录i i++数值
            j=i-d;//j是数组下标i对应数组下标值
        
        while (j>=0&&array[j]>x)
        {
            array[j+d]=array[j];
            j=j-d;
        }
            array[j+d]=x;//array[j]>x不成立就替换值
        }
        d/=2;
        
    }
}

 

posted @ 2015-08-07 10:39  ios-C  阅读(171)  评论(0编辑  收藏  举报