c语言排序代码实现

Posted jfyl1573

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言排序代码实现相关的知识,希望对你有一定的参考价值。

关于快速,冒泡,选择,插入等排序,本人用代码实现,均能运行成功。

本文除了排序,针对几种swap函数,也进行了说明,通过汇编代码分析,swap1函数的效率最高。

#include<iostream>
#include <cstdio>

/*交换函数*/
void swap1(int *a,int *b)
  int tmp = *a;
  *a = *b;
  *b = tmp;

/**
*swap2和swap3针对同一个变量,会导致这个变量为0
*因为两个指针指向同一个变量。
*/
void swap2(int *a,int *b)

  *a = *a ^ *b;
  *b = *a ^ *b; //*a ^ *b ^ *b -> *a
  *a = *a ^ *b; //*a ^ *b ^ *a -> *b

void swap3(int *a,int *b)

  *a = *a + *b;
  *b = *a - *b;
  *a = *a - *b;


void swap3(int &a,int &b)
  printf("swap3:%d,%d\n",a,b);
  a = a + b;
  b = a - b;
  a = a - b;
  printf("swap3 end:%d,%d\n",a,b);

/*快速排序*/
//不稳定,时间复杂度O(logN) - O(N) 空间复杂度O(1)
void quicksort(int *a,int low,int high)

  int i = low;
  int j = high;
  int key = a[low];
  if(low >= high)
  return;
  
  while(low < high)
    while(low<high && key <= a[high])
      --high;
    

    if(key > a[high])
      swap2(&a[low], &a[high]);//交换最低位与最高位置得数据
      ++low;
    

    while(low <high && key >= a[low] )
      ++low;
    

    if(key < a[low])
      swap2(&a[low], &a[high]);
      --high;
    
    
    quicksort(a,i,low-1);
    quicksort(a,low+1,j);


/*冒泡排序*/
//稳定,最坏O(N^2) 最好O(N) 空间复杂度O(1)
void maopaoSort(int *a,int size)

  int j,i;
  for(i=0;i<size;++i)
    for(j=i+1;j<size;++j)
      if(a[j] > a[i])
        swap2(&a[j],&a[i]);
      
     
  


/*插入排序*/
//稳定,最坏O(N^2) 最好O(N)
void insertSort(int nums[],int size)

  int i,j;
  for(i=1;i<size;++i)
    int n = nums[i];
    j = i-1;
    while(j>=0&&n>=nums[j])
      nums[j+1] = nums[j];
      --j;
    
    nums[j+1] = n;
  


/*选择排序*/
//不稳定,最坏O(N^2) 最好O(N)
void selectSort(int *nums,int size)

  int i = 0,j =0;
  int index = 0;
  for(i=0;i<size-1;++i)
    index = i;
    for(j=i+1;j<size;++j)
      if(nums[index] < nums[j])
        index = j;
      
    
    if(index != i)
     swap3(nums[index],nums[i]);//使用的是重载的引用类型
  


void show(int *a,int size)

  std::cout<<"show:"<<std::endl;
  for(int i=0;i<size;++i)
    std::cout<<a[i]<<" ";
  
  std::cout<<std::endl;

int main()

  int arra[] = 100,2,10,11,9,-1000;
  int size = sizeof(arra)/sizeof(arra[0]);
  printf("sort start:\n");
  show(arra, size);
  selectSort(arra,size);
  printf("sort end:\n");
  show(arra, size);

以上是关于c语言排序代码实现的主要内容,如果未能解决你的问题,请参考以下文章

C语言实现九大排序算法(建议收藏!)

C语言快速排序代码

选择排序解析 + 代码实现(C语言)

选择排序解析 + 代码实现(C语言)

c语言排序代码实现

快速排序的c语言实现代码