当前位置:   article > 正文

排序算法C语言代码_c语言排序代码

c语言排序代码

1.快速排序

  1. void quicksort(int* a,int left,int right){
  2. if(left>=right)return ;
  3. int begin=left,end=right;
  4. int pivot=begin,key=a[begin];
  5. while(begin<end){
  6. while(begin<end&&a[end]>=key){
  7. end--;
  8. }
  9. a[pivot]=a[end];
  10. pivot=end;
  11. while(begin<end&&a[begin]<=key){
  12. begin++;
  13. }
  14. a[pivot]=a[begin];
  15. pivot=begin;
  16. }
  17. a[pivot]=key;
  18. quicksort(a,left,pivot-1);
  19. quicksort(a,pivot+1,right);
  20. }

2.冒泡排序

  1. void bubble_sort(int* a,int len){
  2. int i,j,temp;
  3. for(i=0;i<len-1;i++){
  4. int cnt=0;
  5. for(int j=0;j<len-1-i;j++){
  6. if(a[j]>a[j+1]){
  7. temp=a[j];
  8. a[j]=a[j+1];
  9. a[j+1]=temp;
  10. cnt=1;
  11. }
  12. }
  13. //一趟下来没有交换任何位置,则证明已排好序
  14. if(cnt==0){
  15. break;
  16. }
  17. }
  18. }

3.插入排序

  1. void insert_sort(int* a,int len){
  2. int i,j,temp;
  3. for(int i=1;i<len;i++){
  4. temp=a[i];
  5. j=i-1;
  6. while(j>=0&&a[j]>temp){
  7. a[j+1]=a[j];
  8. j--;
  9. }
  10. a[j+1]=temp;
  11. }
  12. }

4.希尔排序

  1. void shell_sort(int* a,int len){
  2. int i,j;
  3. int gap=0;
  4. int temp=0,k;
  5. for(int gap=len/2;gap>0;gap/=2){
  6. for(i=0;i<gap;i++){
  7. for(j=i+gap;j<len;i+=gap){
  8. temp=a[j];
  9. k=j-gap;
  10. while(k>=0&&a[k]>temp){
  11. a[k+gap]=a[k];
  12. k-=gap;
  13. }
  14. a[k+gap]=temp;
  15. }
  16. }
  17. }
  18. }

5.选择排序

  1. void select_sort(int* a,int len){
  2. int i,j,min,index;
  3. int temp=0;
  4. for(int i=0;i<len-1;i++){
  5. min=a[i];
  6. index=i;
  7. for(j=i+1;j<len;j++){
  8. if(a[j]<min)
  9. {
  10. min=a[j];
  11. index=j;
  12. }
  13. }
  14. if(index!=i)
  15. {
  16. temp=a[i];
  17. a[i]=a[index];
  18. a[index]=temp;
  19. }
  20. }
  21. }

6.归并排序

  1. void merge(int* a,int left,int mid,int right){
  2. int i=left,j=mid+1,index=0;
  3. int* newarr=(int* )malloc((right-left+1)*sizeof(int));
  4. if(newarr==NULL)
  5. {
  6. printf("malloc error");
  7. exit(1);
  8. }
  9. while(i<=mid&&j<=right){
  10. if(a[i]<a[j])newarr[index++]=a[i++];
  11. else newarr[index++]=a[j++];
  12. }
  13. while(i<=mid)
  14. newarr[index++]=a[i++];
  15. while(j<=right)
  16. newarr[index++]=a[j++];
  17. for(i=left,index=0;index<(right-left+1);i++,index++){
  18. a[i]=newarr[index++];
  19. }
  20. free(newarr);
  21. }
  22. void merge_sort(int* a,int low,int high){
  23. if(low>=high)return ;
  24. int mid=(high-low)/2;
  25. merge_sort(a,low,mid);
  26. merge_sort(a,mid+1,high);
  27. merge(a,low,mid,high);
  28. }

7.基数排序

  1. int get_max(int a[], int n) {
  2. int i, max;
  3. max = a[0];
  4. for (i = 1; i < n; i++) {
  5. if (a[i] > max) {
  6. max = a[i];
  7. }
  8. }
  9. return max;
  10. }
  11. void count_sort(int a[], int n, int exp) {
  12. int *output = (int *)malloc(n*sizeof(int));
  13. int i, buckets[10] = { 0 };
  14. for (i = 0; i < n; i++) {
  15. buckets[(a[i] / exp) % 10]++;
  16. }
  17. for (i = 1; i < 10; i++) {
  18. buckets[i] += buckets[i - 1];
  19. }
  20. for (i = n - 1; i >= 0; i--) {
  21. output[buckets[(a[i] / exp) % 10] - 1] = a[i];
  22. buckets[(a[i] / exp) % 10]--;
  23. }
  24. for (i = 0; i < n; i++) {
  25. a[i] = output[i];
  26. }
  27. }
  28. void radix_sort(int a[], int n) {
  29. int exp;
  30. int max = get_max(a, n);
  31. for (exp = 1; max / exp > 0; exp *= 10) {
  32. count_sort(a, n, exp);
  33. }
  34. }

8 堆排序

  1. void swap(int* a, int* b) {
  2. int tmp = *a;
  3. *a = *b;
  4. *b = tmp;
  5. }
  6. void maxheap_sort(int *a, int start,int end) {
  7. int c = start;
  8. int l = 2 * c + 1;
  9. int tmp = a[c];
  10. for (; l <= end; c = l, l = 2 * l + 1) {
  11. if (l < end && a[l] < a[l + 1]) {
  12. l++;
  13. }
  14. if (tmp >= a[l]) {
  15. break;
  16. }
  17. else {
  18. a[c] = a[l];
  19. a[l] = tmp;
  20. }
  21. }
  22. }
  23. void heap_sort_asc(int a[], int n) {
  24. int i;
  25. for (i = n / 2 - 1; i >= 0; i--) {
  26. maxheap_sort(a, i, n - 1);
  27. }
  28. for (i = n - 1; i > 0; i--) {
  29. swap(&a[0], &a[i]);
  30. maxheap_sort(a, 0, i - 1);
  31. }
  32. }

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

闽ICP备14008679号