C 语言快速排序算法以及 qsort

Posted btxz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C 语言快速排序算法以及 qsort相关的知识,希望对你有一定的参考价值。

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <time.h>
 4 //快速排序
 5 void quick_sort(float data[], int left, int right){
 6    int i = left;
 7    int j = right;
 8    float tag = data[i];
 9    while(i<j){
10      while( i<j && tag < data[j] ) j--;
11      if( i<j ) data[i++] = data[j];
12       
13      while( i<j && tag > data[i] ) i++;
14      if( i<j ) data[j--] = data[i];
15    }
16    data[i] = tag;
17    if( left < i ) quick_sort(data, left, j - 1);
18    if( i < right ) quick_sort(data, j + 1, right); 
19 }
20 //比较函数
21 int comp(const void *a, const void *b){
22   float x = *(float *)a;
23   float y = *(float *)b;
24 
25   if( x > y ) return 1;
26   else if( x < y ) return -1;
27   else return 0;
28 }
29 
30 int main(int argc, char *argv[]){
31   float data[10], data1[10];
32   int i = 0;
33   srand((unsigned)time(NULL));
34 
35   printf("
 sort data: ");
36   for(i = 0; i < 10; i++){//生成随机数
37     data[i] = rand() % 100  * 0.1;
38     data1[i] = data[i];
39     printf("[%.1f] ",data[i]);
40   }
41   
42   quick_sort(data,0, 9);
43   qsort(data1, 10, sizeof(float), comp);
44 
45   printf("
quick_sort: ");
46   for(i = 0; i < 10; i++) printf("[%.1f] ", data[i]);
47 
48   printf("
lib  qsort: ");
49   for(i = 0; i < 10; i++) printf("[%.1f] ", data1[i]);
50   printf("
");
51 
52   return 0;
53 }

运行结果

         sort data: [8.6] [1.2] [5.1] [8.3] [6.5] [4.8] [5.3] [5.3] [7.3] [3.6]
       quick_sort: [1.2] [3.6] [4.8] [5.1] [5.3] [5.3] [6.5] [7.3] [8.3] [8.6]
           lib qsort: [1.2] [3.6] [4.8] [5.1] [5.3] [5.3] [6.5] [7.3] [8.3] [8.6]

以上是关于C 语言快速排序算法以及 qsort的主要内容,如果未能解决你的问题,请参考以下文章

C语言之qsort函数进行排序

C语言自带的快速排序(qsort)函数使用方法

C语言篇 + 指针进阶练习 + qsort模拟实现(回调函数思想) + 指针和数组笔试题

怎么样才能做到对多种数据类型排序?C语言快速排序——qsort函数及其模拟实现

C语言 快速排序

各种排序算法分析总结(待整理))