当前位置:   article > 正文

数据结构中的排序——C语言实现排序源代码_数据结构c语言版排序实验源代码

数据结构c语言版排序实验源代码
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. void Print(int a[], int n);
  4. void Swap (int *a, int *b);
  5. int main()
  6. {
  7. int a[20] = {21,23,53,32,54,30,65,43,13,35,24,95,65,67,45,87,37,22,100,64};
  8. Print(a, 20);
  9. BubbleSort(a, 20);
  10. InsertSort1(a, 20);
  11. SimpleSelectSort(a,20);
  12. ShellSort(a, 20);
  13. QuickSort(a, 20);
  14. printf("\n排序结果:\n");
  15. Print(a, 20);
  16. return 0;
  17. }
  18. void Print(int a[], int n)//数组输出函数。便于调试
  19. {
  20. for(int i = 0; i < n; i++)
  21. printf("%4d", a[i]);
  22. }
  23. void Swap (int *a, int *b)
  24. {
  25. int temp;
  26. temp = *a;
  27. *a = *b;
  28. *b = temp;
  29. }


 

冒泡排序:

  1. /************************冒泡排序法***********************/
  2. void BubbleSort(int a[],int n)
  3. {
  4. for(int i = 0; i < n; i++)
  5. for(int j = 1; j < n - i ; j++)
  6. {
  7. if(a[j] > a[j-1])
  8. Swap(&a[j], &a[j-1]);
  9. }
  10. }


 

简单选择排序:

  1. /***************简单选择排序******************************/
  2. void SimpleSelectSort(int a[],int n)
  3. {
  4. int min;
  5. for(int i = 0; i < n; i++)
  6. {
  7. min = i;
  8. for(int j = i + 1 ; j < n; j++)
  9. {
  10. if(a[j] > a[min])
  11. min = j;
  12. }
  13. if(min != i)
  14. Swap(&a[min], &a[i]);
  15. }
  16. }


 

直接插入排序:

  1. void InsertSort1(int a[], int n)
  2. {
  3. int i, j;
  4. for( i = 1; i < n; ++i)
  5. {
  6. for(j = i-1; j >= 0; --j)
  7. {
  8. if(a[j] < a[i])
  9. break;
  10. }
  11. if(j != i - 1)
  12. {
  13. int temp = a[i];
  14. for(int k = i-1;k > j; --k)
  15. a[k+1] = a[k];
  16. a[k+1] = temp;
  17. }
  18. }
  19. }


 

希尔排序:

  1. void ShellSort(int a[], int n)
  2. {
  3. int i, j, step;
  4. for(step = n/2; step > 0; step/=2)
  5. {
  6. for(i = 0; i < step; i++)
  7. {
  8. for(j = i+step; j < n; j += step)
  9. {
  10. if(a[j] < a[j-step])
  11. {
  12. int temp = a[j];
  13. int k = j - step;
  14. while( k >= 0 && a[k] > temp)
  15. {
  16. a[k + step] = a[k];
  17. k = k - step;
  18. }
  19. a[k + step] = temp;
  20. }
  21. }
  22. }
  23. }
  24. }


 

归并排序:

  1. /*******************归并排序开始*************************/
  2. void MergeSort(int a[], int n)
  3. {
  4. int *b = (int*)malloc(sizeof(int));
  5. MergeSortAssist(a, b, 0, n-1);
  6. for(int i = 0; i < n; i++)
  7. a[i] = b[i];
  8. free(b);
  9. }
  10. void MergeSortAssist(int a[], int b[], int first,int last)
  11. {
  12. while(first < last)
  13. {
  14. int mid = (last + first)/2;
  15. MergeSortAssist(a, b, first, mid);
  16. MergeSortAssist(a, b, mid + 1, last);
  17. MergeSortMsort(a, b, first, mid, last);
  18. }
  19. }
  20. void MergeSortMsort(int a[], int b[], int first, int mid, int last)
  21. {
  22. int i = first;
  23. int j = mid + 1;
  24. int k = 0;
  25. while( i <= mid && j <= last)
  26. {
  27. if(a[i] <= a[j])
  28. b[k++] = a[i++];
  29. else
  30. b[k++] = a[j++];
  31. }
  32. while( j<= last)
  33. b[k++] = a[j++];
  34. while( i <= mid)
  35. b[k++] = a[i++];
  36. for(int l = first; l < k; l++)
  37. a[first + l] = b[l];
  38. }
  39. /*****************归并排序结束*********************/


 

快速排序:

  1. /*******************快速排序开始***********************/
  2. void QuickSort(int a[], int n)
  3. {
  4. Qsort(a, 0, n-1);
  5. }
  6. void Qsort(int a[], int low, int high)
  7. {
  8. int pivot;
  9. if( low < high)
  10. {
  11. pivot = Partition(a, low, high);
  12. Qsort(a, low, pivot-1);
  13. Qsort(a, pivot + 1, high);
  14. }
  15. }
  16. int Partition(int a[], int low, int high)
  17. {
  18. int i = low, j = high;
  19. int temp = a[low];
  20. while(i < j)
  21. {
  22. while(i < j && a[j] >= temp)
  23. j--;
  24. if(i < j)
  25. {
  26. a[i] = a[j];
  27. i++;
  28. }
  29. while(i < j && a[i] < temp)
  30. i++;
  31. if(i < j)
  32. {
  33. a[j] = a[i];
  34. j--;
  35. }
  36. }
  37. a[i] = temp;
  38. return i;
  39. }
  40. /*******************快速排序结束*************************/


 参考: 1 大话数据结构

             2 http://blog.csdn.net/column/details/algorithm-easyword.html

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/139044
推荐阅读
相关标签
  

闽ICP备14008679号