C语言基础_排序

一、C语言基础

1)冒泡排序

     int array[10] = {1,6,3,4,5,7,7,8,9,10};
       for (int j = 0; j < 9; j++) {
           for (int i=0; i<9-i; i++) {
               if (array[i] > array[i+1]) {
                  array[i] = array[i] ^ array[i+1];
                   array[i+1] = array[i] ^ array[i+1];
                    array[i] = array[i] ^ array[i+1];
               }
           }
        }
       printf("排序后的10个数为:\n");
       for (int i = 0; i < 10; i++) {
            printf("%d\t",array[i]);
       }

 2)快速排序

void bubbleSort(int n, int a[])
{
    int i,j,t;
    for(i=0;i<n-1;i++)
    {
        for(j=0;j<n-1-i;j++)
        {
            
            if(a[j]>a[j+1])
            {
                t=a[j];
                a[j]=a[j+1];
                a[j+1]=t;
            }
        }
    }
    return ;
}

void selectSort(int n,int a[])
{
    int i,j,min,t;
    for (i=0; i<n; i++)
    {
        min = i;
        for(j=i+1;j<n;j++)
        {
            if(a[min] > a[j])
                min = j;
        }
        if(min!=i)
        {
            t=a[min];
            a[min]=a[i];
            a[i]=t;
        }
    }
    return;
}
void quickSort(int l,int r,int a[])
{
    if(l>r)
        return;
    int i,j,key;//i存上界,j存下界,key关键数据;
    i=l;
    j=r;
    key=a[l];
    while(i<j)
    {
        while (key < a[j])
        {
            if(i==j)
                break;
            j--;
        }
        if(i!=j)
        {
            a[i]=a[j];
            i++;
        }
        while (key>a[i])
        {
            if(i==j)
                break;
            i++;
        }
        if(i!=j)
        {
            a[j]=a[i];
            j--;
        }
    }
    a[i]=key;
    quickSort(l, i-1, a);
    quickSort(i+1, r, a);
}

int main(int argc, const char * argv[])
{
    int a[100000],i,n=100000;
    
    for(i=0;i<n;i++)
        a[i]=arc4random()%100;
        printf("待排数组:");
        for(i=0;i<n;i++)
            printf("%d ",a[i]);
        printf("\n");
    
    unsigned long finish,start;
    double duration;
    
    start = clock();
    
    quickSort(0, n-1, a);
    //bubbleSort(n, a);
    selectSort(n, a);
    
    finish = clock();
    
    duration = ((double)finish-start)/CLOCKS_PER_SEC;
    
    
    printf("%lf second\n",duration);
    
        printf("结果数组:");
        for(i=0;i<n;i++)
            printf("%d ",a[i]);
        printf("\n");
    
    return 0;
}

 3) 冒泡排序

        int a[5] ={1,2,3,4,6};
        BOOL flag = YES;
        for (int i =0;i<9; i++) {
            for (int j=0; j<9-i; j++) {
                if (a[j] > a[j+1]) {
                    int temp = 0;
                    temp = a[j];
                    a[j] = a[j+1];
                    a[j+1] = temp;
                    flag = NO;
                }
            }
            if (flag == YES) {
                break;
            }
        }
        for (int i=0; i<5; i++) {
            printf("%d ",a[i]);
        }
        
    }

4)字符串倒转

        char arr[]={};
        printf("请输入一个字符串:\n");
        scanf("%s",arr);
        int len = (int) strlen(arr);
        for (int i=0; i<len/2; i++) {
            char temp;
            temp = arr[i];
            arr[i] = arr[len - 1 -i];
            arr[len - 1 -i] = temp;
        }
        printf("倒转之后字符串为%s",arr);

5)输出直角三角形

    for(int i=0;i<3;i++){
        for(int j=i;j>=0;j--){
            printf("* ");
        }
            printf("\n");
    }

6)字符串排序

        char arr[3][20] = {"liuweijian","hanhong","huzhichao"};
        char temp[20];
        for (int i = 0; i < 2 ; i++) {
            for (int j = 0; j < 2 - i; i++) {
                if (strcmp(arr[j],arr[j+1]) > 0) {
                    strcpy(temp,arr[j]);
                    strcpy(arr[j],arr[j+1]);
                    strcpy(arr[j+1],temp);
                }
            }
        }
        for (int i = 0; i < 3; i++) {
            printf("%s\n",arr[i]);
        }

 

posted @ 2015-08-05 20:11  哈哈政  阅读(191)  评论(0编辑  收藏  举报