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

奇偶排序Linux下C 實現

日期:2017/3/1 10:09:31   编辑:Linux編程
奇偶排序又叫奇偶換位排序,是通過比較數組中相鄰位置(奇-偶)的兩個元素,如果奇偶對第一個大於第二個,則交換,重復該操作。然後,用類似的方式,依次比對所有偶奇對的元素。下面給出奇偶排序的實現代碼:

1、奇偶排序頭文件:oddEvenSort.h

  1. #ifndef ODDEVENSORT_H
  2. #define ODDEVENSORT_H
  3. #include<stdbool.h>
  4. extern void oddEvenSort(int *pArr, const int length);
  5. #endif
2、奇偶排序源文件:oddEvenSort.c
  1. #include "oddEvenSort.h"
  2. void oddEvenSort(int *pArr, const int length)
  3. {
  4. int i, tmp;
  5. bool sorted =false;
  6. while(!sorted)
  7. {
  8. sorted=true;
  9. for(i=1; i<length-1; i+=2)
  10. {
  11. if(*(pArr+i)>*(pArr+i+1))
  12. {
  13. sorted=false;
  14. tmp=*(pArr+i);
  15. *(pArr+i)=*(pArr+i+1);
  16. *(pArr+i+1)=tmp;
  17. }
  18. }
  19. for(i=0; i<length-1; i+=2)
  20. {
  21. if(*(pArr+i)>*(pArr+i+1))
  22. {
  23. sorted=false;
  24. tmp=*(pArr+i);
  25. *(pArr+i)=*(pArr+i+1);
  26. *(pArr+i+1)=tmp;
  27. }
  28. }
  29. }
  30. }
3、main頭文件:main.h
  1. #ifndef MAIN_H
  2. #define MAIN_H
  3. #include<stdio.h>
  4. #include "oddEvenSort.h"
  5. int main(void);
  6. void initRandomArr(int *pArr, const int length);
  7. void showArr(const int *pArr, const int length);
  8. #endif
4、main源文件:main.c
  1. #include "main.h"
  2. int main(void)
  3. {
  4. int length;
  5. printf("Input array length:\n");
  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. oddEvenSort(arr, length);
  17. printf("oddEventSort result:\n");
  18. showArr(arr, length);
  19. return 0;
  20. }
  21. void initRandomArr(int * pArr, const int length)
  22. {
  23. srand(time(NULL));
  24. int i;
  25. for(i=0; i<length; i++)
  26. {
  27. *(pArr+i)=rand()%1000;
  28. }
  29. }
  30. void showArr(const int *pArr, const int length)
  31. {
  32. int i;
  33. for(i=0; i< length; i++)
  34. {
  35. printf("%d ", *(pArr+i));
  36. }
  37. printf("\n");
  38. }
5、編譯
  1. [root@localhost oddEvenSort]$ gcc -c oddEvenSort.c
  2. [root@localhost oddEvenSort]$ gcc -c main.c
  3. [root@localhost oddEvenSort]$ gcc -o main main.o oddEvenSort.o
執行可執行文件main如下:
  1. [root@localhost oddEvenSort]$ ./main
  2. Input array length:
  3. 6
  4. Get random array:
  5. 59 967 202 868 171 869
  6. oddEventSort result:
  7. 59 171 202 868 869 967
奇偶排序最差時間復雜度是O(n²),適用於排序小列表
Copyright © Linux教程網 All Rights Reserved