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语言排序代码实现的更多相关文章
- Javascript 语言精粹 代码片段合集
Javascript 语言精粹 代码片段合集 标签:Douglas-Crockford Javascript 最佳实践 原文链接 更好的阅读体验 使用一个method 方法定义新方法 Function ...
- C语言初学者代码中的常见错误与瑕疵(23)
见:C语言初学者代码中的常见错误与瑕疵(23)
- C语言混乱代码大赛
main() {printf(&unix["\021%six\012\0"], (unix)["have"] + "fun" - 0 ...
- 一个超复杂的间接递归——C语言初学者代码中的常见错误与瑕疵(6)
问题: 问题出处见 C语言初学者代码中的常见错误与瑕疵(5) . 在该文的最后,曾提到完成的代码还有进一步改进的余地.本文完成了这个改进.所以本文讨论的并不是初学者代码中的常见错误与瑕疵,而是对我自己 ...
- C语言初学者代码中的常见错误与瑕疵(5)
问题: 素数 在世博园某信息通信馆中,游客可利用手机等终端参与互动小游戏,与虚拟人物Kr. Kong 进行猜数比赛. 当屏幕出现一个整数X时,若你能比Kr. Kong更快的发出最接近它的素数答案,你将 ...
- C语言初学者代码中的常见错误与瑕疵(19)
见:C语言初学者代码中的常见错误与瑕疵(19)
- C语言初学者代码中的常见错误与瑕疵(14)
见:C语言初学者代码中的常见错误与瑕疵(14) 相关链接:http://www.anycodex.com/blog/?p=87
- 分数的加减法——C语言初学者代码中的常见错误与瑕疵(12)
前文链接:分数的加减法——C语言初学者代码中的常见错误与瑕疵(11) 重构 题目的修正 我抛弃了原题中“其中a, b, c, d是一个0-9的整数”这样的前提条件,因为这种限制毫无必要.只假设a, b ...
- C语言初学者代码中的常见错误与瑕疵(9)
题目 字母的个数 现在给你一个由小写字母组成字符串,要你找出字符串中出现次数最多的字母,如果出现次数最多字母有多个那么输出最小的那个. 输入:第一行输入一个正整数T(0<T<25) 随后T ...
随机推荐
- python 识别验证码自动登陆
# python 3.5.0 # 通过Chrom浏览器访问发起请求 # 需要对应版本的Chrom和chromdriver # 作者:linyouyi from selenium import webd ...
- IOI 2005 River (洛谷 3354)
题目描述 几乎整个Byteland王国都被森林和河流所覆盖.小点的河汇聚到一起,形成了稍大点的河.就这样,所有的河水都汇聚并流进了一条大河,最后这条大河流进了大海.这条大河的入海口处有一个村庄--名叫 ...
- kma 2019CSP前刷题记录
2019/10/25 \([LNOI2014]\ LCA\) \([Luogu\ P2774]\) 方格取数问题 \(Gauss\)消元板 \([JSOI2008]\)球形空间产生器 2019/10/ ...
- Always On主辅延迟相关描述
延迟是AlwaysOn最大的敌人之一 延迟是AlwaysON的最大敌人之一.对AlwaysON而言,其首要目标就尽量减少(无法避免)主副本.辅助副本的数据延迟,实现主副本.辅助副本的“数据同步”.只有 ...
- Lvs+keepalived+mysql(主从复制)
1.准备环境 操作系统:centos 6.5 2台机器主机名为node53.node54 Mysql Lvs keepalived node2 Y Y Y node3 Y Y Y ...
- 创建 Angular 8.0 项目
创建 Angular 8.0 项目,首先确保已经安装了 nodejs,如果没有安装,请看这篇文章安装:node.js 安装 1.新建一个空文件夹 angularproject,作为工作区 2.安装 A ...
- pure-ftpd 配置
# Disallow anonymous connections. Only allow authenticated users. NoAnonymous yes # If you want simp ...
- UVA 12676 Inverting Huffman
题目链接:https://vjudge.net/problem/UVA-12676 题目大意 一串文本中包含 N 个不同字母,经过哈夫曼编码后,得到这 N 个字母的相应编码长度,求文本的最短可能长度. ...
- A1075 PAT Judge (25 分)
The ranklist of PAT is generated from the status list, which shows the scores of the submissions. Th ...
- Nginx常用功能配置二
Nginx常用功能配置二 Nginx location匹配设置 location作用:可以根据用户请求的URI来执行不同的应用,根据用户请求的网站的地址URL匹配. location语法: locat ...