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语言排序代码实现的主要内容,如果未能解决你的问题,请参考以下文章