黑马程序员技术交流社区

标题: 我感觉自己的排序写的比较全面 [打印本页]

作者: 西域男孩刚    时间: 2015-9-4 23:35
标题: 我感觉自己的排序写的比较全面
冒泡排序和选择排序,我把它编到一起,感觉很有成就感!
#include <stdio.h>

void test(){
   
    //定义一个数组
    int arr[]={1,3,67,5,6,34,25,18,96,78};
    //计算数组长度
    int len = sizeof(arr)/sizeof(int);
    //遍历数组
    for (int i=0; i<len; i++) {
        printf("arr[%d]=%d\t",i,arr[i]);
    }
    printf("\n");
    //提示用户选择冒泡排序or选择排序
    printf("请选择排序方式,1冒泡排序  2选择排序:\n");
    while (1) {
        //定义选择方式
        int a;
        //接收数据
        scanf("%d",&a);
        //排序方法
        //定义临时变量
        int temp;
        if(1==a){
            printf("冒泡排序法:");
            
            for (int i=0; i<len-1; i++) {
                for (int j=0; j<len-1-i; j++) {
                    if (arr[j]>arr[j+1]) {
                        temp=arr[j];
                        arr[j]=arr[j+1];
                        arr[j+1]=temp;
                    }
                }
            }
            for (int i=0; i<len; i++) {
               
                printf("%d\t",arr[i]);
               
            }
        }else if (2==a){
            printf("选择排序法:");
            for (int i=0; i<len-1; i++) {
                for (int j=i+1; j<len; j++) {
                    if (arr[i]>arr[j]) {
                        temp=arr[i];
                        arr[i]=arr[j];
                        arr[j]=temp;
                    }
                }
            }
            
            for (int i=0; i<len; i++) {
               
                printf("%d\t",arr[i]);
               
            }
            
        }else {
            printf("请按要求输入");
            
        }
        printf("\n");
        
    }
   
   
}

void print(int arr[],int len){
   
    for (int i=0; i<len; i++) {
        printf("arr[%d]=%d\t",i,arr[i]);
    }
    printf("\n");
}
void maoPao(int arr[],int len){
    int temp;
    for (int i=0; i<len-1; i++) {
        for (int j=0; j<len-1-i; j++) {
            if (arr[j]>arr[j+1]) {
                temp=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=temp;
            }
        }
    }
    for (int i=0; i<len; i++) {
        
        printf("%d\t",arr[i]);
        
    }
   
}
void xuanZe(int arr[],int len){
    int temp;
    for (int i=0; i<len-1; i++) {
        for (int j=i+1; j<len; j++) {
            if (arr[i]>arr[j]) {
                temp=arr[i];
                arr[i]=arr[j];
                arr[j]=temp;
            }
        }
    }
    for (int i=0; i<len; i++) {
        
        printf("%d\t",arr[i]);
        
    }
   
   
}
int main(){
   
    //定义一个数组
    int arr[]={1,3,67,5,6,34,25,18,96,78};
    //计算数组长度
    int len = sizeof(arr)/sizeof(int);
   
    print(arr, len);
   
    //提示用户选择冒泡排序or选择排序
    printf("请选择排序方式,1冒泡排序  2选择排序:\n");
    while (1) {
        //定义选择方式
        int a;
        //接收数据
        scanf("%d",&a);
        //排序方法
        if(1==a){
            printf("冒泡排序法:");
            maoPao(arr, len);
            
        }else if (2==a){
            printf("选择排序法:");
            xuanZe(arr, len);
            
        }else {
            printf("请按要求输入");
            
        }
        printf("\n");
        
    }
   
   
    return 0;
   
}

作者: 张中付    时间: 2015-9-5 09:59
冒泡排序的问题是找出最值,没有必要比较一次就要交换,我们只要记住它的位置,等到一轮遍历结束后再交换,你看是否好点




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2