[转帖] Linux下C 实现快速排序_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3323 | 回复: 0   主题: [转帖] Linux下C 实现快速排序        下一篇 
luxiaofan
注册用户
等级:上尉
经验:705
发帖:67
精华:0
注册:2012-10-8
状态:离线
发送短消息息给luxiaofan 加好友    发送短消息息给luxiaofan 发消息
发表于: IP:您无权察看 2012-10-12 16:03:59 | [全部帖] [楼主帖] 楼主

这次、给出快速排序的实现,主要代码如下:

1、排序头文件:quickSort.h

#ifndef QUICKSORT_H
#define QUICKSORT_H
extern void quickSort(int *pArr, int length);
#endif


2、排序源文件:quickSort.c

#include "quickSort.h"
void quick_Sort(int * pArr, int left, int right)
{
      if(left >= right)
      {
            return;
      }
      int k = *(pArr+left);
      int l,r;
      l=left;
      r=right;
      while(left < right)
      {
            while(*(pArr+right)>k && right> left)
            {
                  right--;
            }
            if(left!=right)
            {
                  *(pArr+left)=*(pArr+right);
                  left++;
            }
            while(*(pArr+left)<k && left < right)
            {
                  left++;
            }
            if(left!=right)
            {
                  *(pArr+right)=*(pArr+left);
                  right--;
            }
      }
      *(pArr+left)=k;
      if(l < left-1)
      {
            quick_Sort(pArr, l, left-1);
      }
      if(r > left+1)
      {
            quick_Sort(pArr, left+1, r);
      }
}
void quickSort(int *pArr, int length)
{
      quick_Sort(pArr, 0, length-1);
}


3、main头文件: main.h

#ifndef MAIN_H
#define MAIN_H
#include<stdio.h>
#include "quickSort.h"
int main(void);
void showArr(const int *pArr, const int length);
void initRandomArr(int *pArr, const int length);
#endif


4、main源文件:main.c

#include "main.h"
int main(void)
{
      printf("Input array length:\n");
      int length;
      scanf("%d", &length);
      if(length<0)
      {
            printf("Array length must be larger 0\n");
            return 1;
      }
      int arr[length];
      initRandomArr(arr, length);
      printf("Get random array :\n");
      showArr(arr, length);
      quickSort(arr, length);
      printf("quick sort result:\n");
      showArr(arr, length);
      return 0;
}
void showArr(const int *pArr, const int length)
{
      int i;
      for(i=0; i<length; i++)
      {
            printf("%d ", *(pArr+i));
      }
      printf("\n");
}
void initRandomArr(int *pArr, const int length)
{
      int i;
      srand(time(NULL));
      for(i=0; i< length; i++)
      {
            *(pArr+i)=rand()%1000;
      }
}


5、Makefile文件:

all:main
main:main.o quickSort.o
gcc -o main main.o quickSort.o
main.o:main.c
gcc -c main.c
quickSort.o:quickSort.c
gcc -c quickSort.c
clean:
@echo "start cleanning..."
-rm main *.o
@echo "completed clean"
.PHONY:clean


6、编译:

[root@localhost quickSort]$ make
gcc -c main.c
gcc -c quickSort.c
gcc -o main main.o quickSort.o


如果一切顺利,降看到可执行文件:main,执行大致如下:

[root@localhost quickSort]$ ./main
Input array length:
10
Get random array :
261 350 755 768 500 405 585 127 534 518
quick sort result:
127 261 350 405 500 518 534 585 755 768


快速排序最差时间复杂度是:О(n²),最优时间复杂度:О(nlogn),平均时间复杂度:О(nlogn)。快速排序是种不稳定排序。




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论