歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 快速排序Linux下C 實現

快速排序Linux下C 實現

日期:2017/3/1 10:09:32   编辑:Linux編程

這次、給出快速排序的實現,主要代碼如下:

1、排序頭文件:quickSort.h

  1. #ifndef QUICKSORT_H
  2. #define QUICKSORT_H
  3. extern void quickSort(int *pArr, int length);
  4. #endif

2、排序源文件:quickSort.c

  1. #include "quickSort.h"
  2. void quick_Sort(int * pArr, int left, int right)
  3. {
  4. if(left >= right)
  5. {
  6. return;
  7. }
  8. int k = *(pArr+left);
  9. int l,r;
  10. l=left;
  11. r=right;
  12. while(left < right)
  13. {
  14. while(*(pArr+right)>k && right> left)
  15. {
  16. right--;
  17. }
  18. if(left!=right)
  19. {
  20. *(pArr+left)=*(pArr+right);
  21. left++;
  22. }
  23. while(*(pArr+left)<k && left < right)
  24. {
  25. left++;
  26. }
  27. if(left!=right)
  28. {
  29. *(pArr+right)=*(pArr+left);
  30. right--;
  31. }
  32. }
  33. *(pArr+left)=k;
  34. if(l < left-1)
  35. {
  36. quick_Sort(pArr, l, left-1);
  37. }
  38. if(r > left+1)
  39. {
  40. quick_Sort(pArr, left+1, r);
  41. }
  42. }
  43. void quickSort(int *pArr, int length)
  44. {
  45. quick_Sort(pArr, 0, length-1);
  46. }

3、main頭文件: main.h

  1. #ifndef MAIN_H
  2. #define MAIN_H
  3. #include<stdio.h>
  4. #include "quickSort.h"
  5. int main(void);
  6. void showArr(const int *pArr, const int length);
  7. void initRandomArr(int *pArr, const int length);
  8. #endif

4、main源文件:main.c

  1. #include "main.h"
  2. int main(void)
  3. {
  4. printf("Input array length:\n");
  5. int length;
  6. scanf("%d", &length);
  7. if(length<0)
  8. {
  9. printf("Array length must be larger 0\n");
  10. return 1;
  11. }
  12. int arr[length];
  13. initRandomArr(arr, length);
  14. printf("Get random array :\n");
  15. showArr(arr, length);
  16. quickSort(arr, length);
  17. printf("quick sort result:\n");
  18. showArr(arr, length);
  19. return 0;
  20. }
  21. void showArr(const int *pArr, const int length)
  22. {
  23. int i;
  24. for(i=0; i<length; i++)
  25. {
  26. printf("%d ", *(pArr+i));
  27. }
  28. printf("\n");
  29. }
  30. void initRandomArr(int *pArr, const int length)
  31. {
  32. int i;
  33. srand(time(NULL));
  34. for(i=0; i< length; i++)
  35. {
  36. *(pArr+i)=rand()%1000;
  37. }
  38. }

5、Makefile文件:

  1. all:main
  2. main:main.o quickSort.o
  3. gcc -o main main.o quickSort.o
  4. main.o:main.c
  5. gcc -c main.c
  6. quickSort.o:quickSort.c
  7. gcc -c quickSort.c
  8. clean:
  9. @echo "start cleanning..."
  10. -rm main *.o
  11. @echo "completed clean"
  12. .PHONY:clean

6、編譯:

  1. [root@localhost quickSort]$ make
  2. gcc -c main.c
  3. gcc -c quickSort.c
  4. gcc -o main main.o quickSort.o
如果一切順利,降看到可執行文件:main,執行大致如下:
  1. [root@localhost quickSort]$ ./main
  2. Input array length:
  3. 10
  4. Get random array :
  5. 261 350 755 768 500 405 585 127 534 518
  6. quick sort result:
  7. 127 261 350 405 500 518 534 585 755 768
快速排序最差時間復雜度是:О(n²),最優時間復雜度:О(nlogn),平均時間復雜度:О(nlogn)。快速排序是種不穩定排序。
Copyright © Linux教程網 All Rights Reserved