• C语言实现4种常用排序


    实在没事搞,反正面试也要用到,继续来写4种排序算法。因为那天用java写了排序,突然想到我是要面试IOS,起码也得用C写。C竟然忘干净了,方法都不会写了。囧啊!

    下面用C实现4种排序算法:快速排序、冒泡排序、选择排序、插入排序。(我是用Xcode写的)

    1、快速排序

    什么都不说了直接上代码吧:

    #pragma -mark 快速排序
    void quickSort(int array[],int low,int high)
    {
        if (array == NULL) {
            return;
        }
        if (low >= high) {
            return;
        }
        
        //取中值
        int middle = low +(high - low)/2;
        int prmt = array[middle];
        
        //开始排序使得left < prmt 同时右边的大于 prmt
        int i = low,j = high;
        while (i <= j) {
            while (array[i] < prmt) {
                i++;
            }
            while (array[j] > prmt) {
                j--;
            }
            if (i <= j) {
                int temp = array[i];
                array[i] = array[j];
                array[j] = temp;
                i++;
                j--;
            }
            
            printf("排序中:");
            printArray(array,7);
        }
        
        //对左边的进行排序处理
        if (low < j) {
            quickSort(array, low, j);
        }
        if (high > i) {
            quickSort(array, i, high);
        }
        
    }
    快速排序过程如下:

    排序前:9 2 10 7 3 7 4 
    排序中:4 2 10 7 3 7 9 
    排序中:4 2 7 7 3 10 9 
    排序中:4 2 7 3 7 10 9 
    排序中:2 4 7 3 7 10 9 
    排序中:2 4 3 7 7 10 9 
    排序中:2 3 4 7 7 10 9 
    排序中:2 3 4 7 7 9 10 
    排序中:2 3 4 7 7 9 10 
    排序后:2 3 4 7 7 9 10
    2、冒泡排序

    还是直接上代码吧,代码君在下面:

    #pragma -mark 冒泡排序
    void buddleSort(int *array,int length)
    {
        if (array == NULL) {
            return;
        }
        
        for (int i = 1; i < length; i++) {
            for (int j = 0; j < length - i; j++) {
                if (array[j] > array[j+1]) {
                    int temp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = temp;
                }
                
                printf("排序中:");
                printArray(array,length);
            }
        }
    }
    
    冒泡排序的过程如下:

    排序前:9 2 10 7 3 7 4 
    排序中:2 9 10 7 3 7 4 
    排序中:2 9 10 7 3 7 4 
    排序中:2 9 7 10 3 7 4 
    排序中:2 9 7 3 10 7 4 
    排序中:2 9 7 3 7 10 4 
    排序中:2 9 7 3 7 4 10 
    排序中:2 9 7 3 7 4 10 
    排序中:2 7 9 3 7 4 10 
    排序中:2 7 3 9 7 4 10 
    排序中:2 7 3 7 9 4 10 
    排序中:2 7 3 7 4 9 10 
    排序中:2 7 3 7 4 9 10 
    排序中:2 3 7 7 4 9 10 
    排序中:2 3 7 7 4 9 10 
    排序中:2 3 7 4 7 9 10 
    排序中:2 3 7 4 7 9 10 
    排序中:2 3 7 4 7 9 10 
    排序中:2 3 4 7 7 9 10 
    排序中:2 3 4 7 7 9 10 
    排序中:2 3 4 7 7 9 10 
    排序中:2 3 4 7 7 9 10 
    排序后:2 3 4 7 7 9 10 
    
    3、选择排序

    代码君,你在哪里:

    #pragma -mark 选择排序
    void selectSort(int array[],int length)
    {
        if (array == NULL) {
            return;
        }
        int min_index;
        for (int i = 0; i< length; i++) {
            min_index = i;
            for (int j = i+1; j < length; j++) {
                if (array[j] < array[min_index]) {
                    int temp = array[j];
                    array[j] = array[min_index];
                    array[min_index] = temp;
                }
                
                printf("排序中:");
                printArray(array,length);
            }
        }
        
    }
    
    选择排序的过程如下:

    排序前:9 2 10 7 3 7 4 
    排序中:2 9 10 7 3 7 4 
    排序中:2 9 10 7 3 7 4 
    排序中:2 9 10 7 3 7 4 
    排序中:2 9 10 7 3 7 4 
    排序中:2 9 10 7 3 7 4 
    排序中:2 9 10 7 3 7 4 
    排序中:2 9 10 7 3 7 4 
    排序中:2 7 10 9 3 7 4 
    排序中:2 3 10 9 7 7 4 
    排序中:2 3 10 9 7 7 4 
    排序中:2 3 10 9 7 7 4 
    排序中:2 3 9 10 7 7 4 
    排序中:2 3 7 10 9 7 4 
    排序中:2 3 7 10 9 7 4 
    排序中:2 3 4 10 9 7 7 
    排序中:2 3 4 9 10 7 7 
    排序中:2 3 4 7 10 9 7 
    排序中:2 3 4 7 10 9 7 
    排序中:2 3 4 7 9 10 7 
    排序中:2 3 4 7 7 10 9 
    排序中:2 3 4 7 7 9 10 
    排序后:2 3 4 7 7 9 10

    4、插入排序

    继续上代码了:

    #pragma -mark 插入排序
    void insertSort(int array[],int length)
    {
        if (array == NULL) {
            return;
        }
        for (int i = 1; i < length; i++) {
            int temp = array[i];
            int j = i-1;
            
            while (j >= 0 && array[j] > temp) {
                array[j+1] = array[j];
                j--;
                
                printf("排序中:");
                printArray(array,length);
            }
            array[j+1] = temp;
        }
        
    }
    
    插入排序的过程如下:

    排序前:9 2 10 7 3 7 4 
    排序中:9 9 10 7 3 7 4 
    排序中:2 9 10 10 3 7 4 
    排序中:2 9 9 10 3 7 4 
    排序中:2 7 9 10 10 7 4 
    排序中:2 7 9 9 10 7 4 
    排序中:2 7 7 9 10 7 4 
    排序中:2 3 7 9 10 10 4 
    排序中:2 3 7 9 9 10 4 
    排序中:2 3 7 7 9 10 10 
    排序中:2 3 7 7 9 9 10 
    排序中:2 3 7 7 7 9 10 
    排序中:2 3 7 7 7 9 10 
    排序后:2 3 4 7 7 9 10 
    
    最后,附上整个类文件吧!

    //
    //  main.c
    //  SortUtil
    //
    //  Created by Mac on 14-4-16.
    //  Copyright (c) 2014年 KnightKing. All rights reserved.
    //
    
    #include <stdio.h>
    
    
    //打印数组
    void printArray(int *array,int len)
    {
        for(int i = 0;i<len;i++){
            printf("%d ",array[i]);
        }
        printf("
    ");
    }
    
    #pragma -mark 冒泡排序
    void buddleSort(int *array,int length)
    {
        if (array == NULL) {
            return;
        }
        
        for (int i = 1; i < length; i++) {
            for (int j = 0; j < length - i; j++) {
                if (array[j] > array[j+1]) {
                    int temp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = temp;
                }
                
                printf("排序中:");
                printArray(array,length);
            }
        }
    }
    
    #pragma -mark 快速排序
    void quickSort(int array[],int low,int high)
    {
        if (array == NULL) {
            return;
        }
        if (low >= high) {
            return;
        }
        
        //取中值
        int middle = low +(high - low)/2;
        int prmt = array[middle];
        
        //开始排序使得left < prmt 同时右边的大于 prmt
        int i = low,j = high;
        while (i <= j) {
            while (array[i] < prmt) {
                i++;
            }
            while (array[j] > prmt) {
                j--;
            }
            if (i <= j) {
                int temp = array[i];
                array[i] = array[j];
                array[j] = temp;
                i++;
                j--;
            }
            
            printf("排序中:");
            printArray(array,7);
        }
        
        //对左边的进行排序处理
        if (low < j) {
            quickSort(array, low, j);
        }
        if (high > i) {
            quickSort(array, i, high);
        }
        
    }
    
    #pragma -mark 选择排序
    void selectSort(int array[],int length)
    {
        if (array == NULL) {
            return;
        }
        int min_index;
        for (int i = 0; i< length; i++) {
            min_index = i;
            for (int j = i+1; j < length; j++) {
                if (array[j] < array[min_index]) {
                    int temp = array[j];
                    array[j] = array[min_index];
                    array[min_index] = temp;
                }
                
                printf("排序中:");
                printArray(array,length);
            }
        }
        
    }
    
    #pragma -mark 插入排序
    void insertSort(int array[],int length)
    {
        if (array == NULL) {
            return;
        }
        for (int i = 1; i < length; i++) {
            int temp = array[i];
            int j = i-1;
            
            while (j >= 0 && array[j] > temp) {
                array[j+1] = array[j];
                j--;
                
                printf("排序中:");
                printArray(array,length);
            }
            array[j+1] = temp;
        }
        
    }
    
    int main(int argc, const char * argv[])
    {
    
        int a[] = {9,2,10,7,3,7,4};
        int length = 7;
        
        printf("排序前:");
        printArray(a,length);
        
        //快速排序
    //    quickSort(a, 0, 6);
        //冒泡排序
    //    buddleSort(a,length);
        //选择排序
    //    selectSort(a, length);
        //插入排序
        insertSort(a, length);
        
        
        printf("排序后:");
        printArray(a,length);
        
        return 0;
    }


  • 相关阅读:
    VirtualBox-5.0.16设置windows与ubuntu的共享文件夹
    ubuntu普通账户获取root权限的方法以及su和su -的区别
    9、redis之事务2-Jedis的八种调用方式(事务、管道、分布式)介绍
    8、redis之事务1-redis命令
    3、redis之java client环境搭建
    2、redis原生的命令操作不同数据类型
    如何用消息系统避免分布式事务
    Caffe学习系列(1):安装配置ubuntu14.04+cuda7.5+caffe+cudnn
    caffe windows学习:第一个测试程序
    caffe windows 学习第一步:编译和安装(vs2012+win 64)
  • 原文地址:https://www.cnblogs.com/wanghang/p/6298901.html
Copyright © 2020-2023  润新知