排序集锦

各种排序算法,总结一下,一直在遗忘......

【冒泡排序】

就是下面这个鬼啦:

c实现代码(升序):

#include<stdio.h>

void BubbleSort(int *array,int num)
{
int i,j,temp;
for(j=;j<num;j++)
{
for(i=;i<num-j;i++)
{
if(array[i-]>array[i]) //倒序就把这里改成<咯
{
temp=array[i-];
array[i-]=array[i];
array[i]=temp;
}
}
}
}
int main()
{
int num;
scanf("%d",&num);
int array[num];
int i;
for(i=;i<num;i++)
{
scanf("%d",&array[i]);
}
BubbleSort(array,num);
for(i=;i<num;i++)
{
printf("%d ",array[i]);
}
printf("\n");
return ; }

【插入排序】

按顺序插入

C语言实现:

#include<stdio.h>

void insertionsort(int *array,int num)
{
int i,j;
for(i=;i<num;i++)
{
int current=array[i];
j=i-;
while(j>= && array[j]>current)
{
array[j+]=array[j];//后移为current空出位置
j--;
}
array[j+]=current;//将current插入空位
}
} int main()
{
int num;
scanf("%d",&num);
int array[num];
int i;
for(i=;i<num;i++)
{
scanf("%d",&array[i]);
}
insertionsort(array,num);
for(i=;i<num;i++)
{
printf("%d ",array[i]);
}
printf("\n");
return ;

【希尔排序】

C语言实现代

#include<stdio.h>
void shellsort(int *array,int num)
{
int i,j,increment,temp;
for(increment=num/;increment>;increment/=)
{
for(i=increment;i<num;i++)
{
temp=array[i];
for(j=i;i>=increment;j-=increment)
{
if(temp<array[j-increment])
{
array[j]=array[j-increment];
}
else
{
break;
}
}
array[j]=temp;
}  //这里其实跟普通插入一样咯,除了间隔大点
}  //更改步长,直至最后increment=1,即为普通插入排序
} int main()
{
int num;
scanf("%d",&num);
int array[num];
int i;
for(i=;i<num;i++)
{
scanf("%d",&array[i]);
}
shellsort(array,num);
for(i=;i<num;i++)
{
printf("%d ",array[i]);
}
printf("\n");
return ;
}

【选择排序】

C语言实现代码:

#include<stdio.h>
void selectionsort(int *array,int num)
{
int i,j,minindex,temp;
for(i=;i<num;i++)  //从0开始挑选出i之后最小的数放到i的位置
{
minindex=i;
for(j=i+;j<num;j++)
{
if(array[j]<array[minindex])
{
minindex=j;
}
}
temp=array[i];
array[i]=array[minindex];
array[minindex]=temp;
}
} int main()
{
int num;
scanf("%d",&num);
int array[num];
int i;
for(i=;i<num;i++)
{
scanf("%d",&array[i]);
}
selectionsort(array,num);
for(i=;i<num;i++)
{
printf("%d ",array[i]);
}
printf("\n");
return ;
}

【归并排序】

排序过程动图:

C语言实现代码:

#include<stdio.h>

void merge(int *array,int left,int mid,int right)
{
int temp[right-left+];
int pos=,lpos=left,rpos=mid+;
int i;
/*分两个阶段考虑:
  ①左右两端都未遍历完——比较排序 
②有一边遍历完但另一边没有——将未遍历完的依次添加到排序数列后面
最后将temp放入array*/
  while(lpos<=mid&&rpos<=right)
  { 
    if(array[lpos]<array[rpos])
    {
      temp[pos++]=array[lpos++];
    }   
    else
    {  
       temp[pos++]=array[rpos++];
    }
  }  
//阶段①↑
while(lpos<=mid)
temp[pos++]=array[lpos++];
while(rpos<=mid)
temp[pos++]=array[rpos++];
//阶段②↑
for(i=;i<pos;i++)
{
array[i+left]=temp[i];
}
} //归并过程 void mergesort(int *array,int left,int right)
{
int mid=(left+right)/;
if(left<right) //当left=right,返回上层进行merge()
{
mergesort(array,left,mid);
mergesort(array,mid,right);
merge(array,left,mid,right);
} //递归
} int main()
{
int num;
scanf("%d",&num);
int array[num];
int i;
for(i=;i<num;i++)
{
scanf("%d",&array[i]);
}
mergesort(array,,num-);
for(i=;i<num;i++)
{
printf("%d ",array[i]);
}
printf("\n");
return ;
}

Properties ∠( ᐛ 」∠)_:

最差时间复杂度
最优时间复杂度
平均时间复杂度
最差空间复杂度

【快速排序】

Quick Sort是Bubble Sort改进方法。

和归并一样用到分治思想。

图示:

C语言实现代码:

#include<stdio.h>
void quicksort(int *array,int from,int to)
{
if(from>=to) return;
int pivot=array[from]; //pivot就是划分数,即开头那个数啦(其实选哪个数做pivot随你啦)
int i=from,j,temp;
for(j=from+;j<=to;j++) //遍历pivot之后的数
{
if(array[j]<pivot)
{
i=i+; //i在计数比pivot小的数的数量
temp=array[i];
array[i]=array[j];
array[j]=temp;
}
} //通过这个循环将划分区域内数按大小关系分成大于pivot和小于pivot两拨
temp=array[i];
array[i]=array[from];
array[from]=temp;
//将i位置与起始位置数值调换,将pivot换到中间值,原i位置是右边那拨最小数
quicksort(array,from,i-);
quicksort(array,i+,to);
//递归,对pivot两边区域继续quicksort
} int main()
{
int num;
scanf("%d",&num);
int array[num];
int i;
for(i=;i<num;i++)
{
scanf("%d",&array[i]);
}
quicksort(array,,num-);
for(i=;i<num;i++)
{
printf("%d ",array[i]);
}
printf("\n");
return ;
}

其他堆排序什么的之后鞋数据结构再说吧QAQ

【Sorting Collection】的更多相关文章

  1. C#梳理【集合Collection】

    C# 集合(Collection) 集合(Collection)类是专门用于数据存储和检索的类.这些类提供了对栈(stack).队列(queue).列表(list)和哈希表(hash table)的支 ...

  2. 【Unity3D实战】摇摆直升机开发实战(一)

    [Unity3D实战]摇摆直升机开发实战(一) 1.点击[Assets],创建[Sprites]和[Resources]文件夹,然后将所需要的素材导入[Sprites]文件夹中. 2.找到[Sprit ...

  3. 【python进阶】Garbage collection垃圾回收2

    前言 在上一篇文章[python进阶]Garbage collection垃圾回收1,我们讲述了Garbage collection(GC垃圾回收),画说Ruby与Python垃圾回收,Python中 ...

  4. 【Spring实战】----开篇(包含系列目录链接)

    [Spring实战]----开篇(包含系列目录链接) 置顶2016年11月10日 11:12:56 阅读数:3617 终于还是要对Spring进行解剖,接下来Spring实战篇系列会以应用了Sprin ...

  5. 20个新鲜出炉的网站模板【HTML & PSD】

    这里给大家分享20 个新鲜出炉的免费网站模板.这些设计元素将成为你下一个项目的重要素材,可以帮你节省很多的时间.与往常一样,我们经常漫游网络,寻找最好的资源, HTML.CSS 和 PSD 等等,记得 ...

  6. Python开发【第二章】:Python的数据类型

    基本数据类型 一.整型 如: 18.73.84 整型具备如下功能: class int(object): """ int(x=0) -> int or long i ...

  7. 【MongoDB数据库】MongoDB 命令入门初探

    MongoDB是一款NoSql数据库,使用了"面向集合"(Collection-Oriented)原理,意思是数据被分组存储在数据集中,被称为一个集合(Collection).每一 ...

  8. IT第二十一天 - Collections、ArrayList集合、LinkedList集合、Set集合、HashMap集合、集合的操作注意【修20130828】

    NIIT第二十一天 上午 集合 1. 集合Collection存储数据的形式是单个存储的,而Map存储是按照键值对来存储的,键值对:即键+值同时存储的,类似align="center&quo ...

  9. 【Holograms 101D】一步步用Unity 开发 Hologram

    转载请注明出处: copperface:[Holograms 101D]一步步用Unity 开发 Hologram Holograms 101 该教程将带领你走完 Hologram 创建 的全过程.整 ...

随机推荐

  1. ubuntu 安装 vmware 12

    安装VMware Workstation 12 ubuntu15.10安装VMware Workstation12的步骤如下: 1.在 https://download3.vmware.com/sof ...

  2. USACO . Greedy Gift Givers

    Greedy Gift Givers A group of NP (2 ≤ NP ≤ 10) uniquely named friends has decided to exchange gifts ...

  3. Python的文件操作

    文件操作,顾名思义,就是对磁盘上已经存在的文件进行各种操作,文本文件就是读和写. 1. 文件的操作流程 (1)打开文件,得到文件句柄并赋值给一个变量 (2)通过句柄对文件进行操作 (3)关闭文件 现有 ...

  4. 第一个C语言的小项目

    这里先写下主要的业务代码,一些库代码稍后补充上 /** * Feed新闻个性化推送 */ #include "push_service_news.h" /** * 保证单进程运行 ...

  5. 未能加载文件或程序集“System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项。系统找不到指定的文件

    ASP.NET 运行时错误:针对类型System.Web.Mvc.PreApplicationStartCode的应用程序邓启动初始化方法Start 引发了异常,显示下列错误消息: 未能加载文件或程序 ...

  6. [LeetCode] Linked List Random Node 链表随机节点

    Given a singly linked list, return a random node's value from the linked list. Each node must have t ...

  7. [LeetCode] Candy 分糖果问题

    There are N children standing in a line. Each child is assigned a rating value. You are giving candi ...

  8. [LeetCode] Container With Most Water 装最多水的容器

    Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). ...

  9. FMDB的使用方法

    转自:http://blog.devtang.com/blog/2012/04/22/use-fmdb/ 前言 SQLite (http://www.sqlite.org/docs.html) 是一个 ...

  10. AngularJS入门教程

    1. 简介:AngularJS是为了克服HTML在构建应用上的不足而设计的.HTML是一门很好的为静态文本展示设计的声明式语言,但要构建WEB应用的话它就显得乏力了.所以我做了一些工作(你也可以觉得是 ...