精华内容
下载资源
问答
  • C语言实现快速排序

    2020-08-27 01:24:27
    主要为大家详细介绍了C语言实现快速排序算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • c语言实现快速排序

    2015-05-21 20:14:19
    c语言实现快速排序

    快速排序的思想是通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。做法:将待排数据比如data[1]到data[8],让low和high指向data[1]和data[8],然后将data[1]放入data[0]中,這样做的目的是当找到放置data[1]存放的位置后可以把data[1]中存放的数放到它应该在的位置,之后设置一个哨兵位pivotkey,让low和high指向的数不停和哨兵比较,low比哨兵低,则让low+1,同理,如果high比哨兵大则让high-1,直到low不小于high,成立后将data[0]放置的东西放回data[low]中,這样一次排序后就找到data[1]应该在的位置pivot,之后递归调用上述过程,因为data[1]已经被放到了应放的位置,所以递归时只需要调用QSort(pdata,low,pivot-1)和QSort(pdata,pivot+1,high),这样不断递归便可以得到一个有序序列了,需要注意的是快排是一种不稳定的排序,多个相同的值的相对位置也许会在算法结束时产生变动。

    #include <stdio.h>
    
    typedef struct
    {
    	int key;
    	char name[10];
    }Data;
    
    Data ListOld[]={{0,"num0"},{49,"num1"},{38,"num2"},{65,"num3"},{97,"num4"},{76,"num5"},{13,"num6"},{27,"num7"},{49,"num8"}};
    
    void QSort(Data *pdata,int low,int high);
    void PrintData(Data *pdata,int n);
    
    int main(int argc, char *argv[])
    {
    	printf("Hello, world\n");
    	QSort(ListOld,1,8);
    	PrintData(ListOld,9);
    	return 0;
    }
    
    void PrintData(Data *pdata,int n)
    {
    	int i;
    	for(i=1;i<n;i++){
    		printf("%d,%s ",pdata[i].key,pdata[i].name);
    	}
    	printf("\n");
    }
    
    void QSort(Data *pdata,int low,int high)
    {
        int pivot;
        if(low<high)
        {
            pivot = partition(pdata,low,high);
            //printf("%d ",pdata);
            QSort(pdata,low,pivot-1);
            //printf("%d %s ",pdata,"2");
            QSort(pdata,pivot+1,high);
        }
    }
    
    int partition(Data *pdata,int low,int high)
    {
        int pivotkey = pdata[low].key;
        pdata[0] = pdata[low];
        while(low<high)
        {
            while(low<high && pdata[low].key>=pivotkey)
                high--;
            pdata[low] = pdata[high];  //找到一个这样的数后就把它赋给前面的被拿走的low的值
            while(low<high && pdata[low].key<=pivotkey)
                low++;
            pdata[high] = pdata[low];
        }
        pdata[low] = pdata[0];
        return low;
    }
    


    展开全文
  • C语言实现快速排序算法

    万次阅读 多人点赞 2016-11-04 22:33:13
    一、快速排序算法(Quicksort) 1. 定义 快速排序由C. A. R. Hoare在1962年提出。快速排序是对冒泡排序的一种改进,采用了一种分治的策略。 2. 基本思想 通过一趟排序将要排序的数据分割成独立的两部分,其中...

    一、快速排序算法(Quicksort)

    1. 定义

    快速排序由C. A. R. Hoare在1962年提出。快速排序是对冒泡排序的一种改进,采用了一种分治的策略。

    2. 基本思想

    通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

    3. 步骤

    a. 先从数列中取出一个数作为基准数。

    b. 分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。

    c. 再对左右区间重复第二步,直到各区间只有一个数。

    二、C语言实现代码(仅供参考)

     

    /*****************************************************
    File name:Quicksort
    Author:Zhengqijun    Version:1.0    Date: 2016/11/04
    Description: 对数组进行快速排序
    Funcion List: 实现快速排序算法
    *****************************************************/
    
    #include <stdio.h>
    #include <stdlib.h>
    
    #define BUF_SIZE 10
    
    /**************************************************
     *函数名:display
     *作用:打印数组元素
     *参数:array - 打印的数组,maxlen - 数组元素个数
     *返回值:无
     **************************************************/
    void display(int array[], int maxlen)
    {
        int i;
    
        for(i = 0; i < maxlen; i++)
        {
            printf("%-3d", array[i]);
        }
        printf("\n");
    
        return ;
    }
    
    /************************************
     *函数名:QuickSort
     *作用:快速排序算法
     *参数:
     *返回值:无
     ************************************/
    void QuickSort(int *arr, int low, int high)
    {
        if (low < high)
        {
            int i = low;
            int j = high;
            int k = arr[low];
            while (i < j)
            {
                while(i < j && arr[j] >= k)     // 从右向左找第一个小于k的数
                {
                    j--;
                }
    
                if(i < j)
                {
                    arr[i++] = arr[j];
                }
    
                while(i < j && arr[i] < k)      // 从左向右找第一个大于等于k的数
                {
                    i++;
                }
    
                if(i < j)
                {
                    arr[j--] = arr[i];
                }
            }
    
            arr[i] = k;
    
            // 递归调用
            QuickSort(arr, low, i - 1);     // 排序k左边
            QuickSort(arr, i + 1, high);    // 排序k右边
        }
    }
    
    // 主函数
    int main()
    {
        int array[BUF_SIZE] = {12,85,25,16,34,23,49,95,17,61};
        int maxlen = BUF_SIZE;
        
        printf("排序前的数组\n");
        display(array, maxlen);
        
        QuickSort(array, 0, maxlen-1);  // 快速排序
        
        printf("排序后的数组\n");
        display(array, maxlen);
        
        return 0;
    }

     

    执行程序后的结果如下所示:

    上诉代码结合了我自己对快速排序的看法和理解,仅供参考。

     

    展开全文
  • 主要为大家详细介绍了C语言实现快速排序算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要为大家详细介绍了C语言实现快速排序的改进代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,641
精华内容 656
关键字:

c语言实现快速排序

c语言 订阅