文档章节

排序算法汇总

_编程菜鸟_
 _编程菜鸟_
发布于 2013/10/10 16:49
字数 609
阅读 50
收藏 0
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>

//选择法排序
//原理:将序列划分为无序和有序区,寻找无序区中的最小值和无序区的首元素交换,有序区扩大一个,循环最终完成全部排序。
void SelectSort(int *ipOriginData,//[I]初始元素
			   int iCount//[I]元素个数
			   )
{
	int i=0;

	/*输出原始元素*/
	printf("Origin Number:");
	for (i=0;i<iCount;i++)
	{
		printf("%d ",ipOriginData[i]);
	}  printf("\n");

	for (i=0;i<iCount;i++)
	{
		int j=0 ,k=0,iMin=0;

		k=i;
		iMin=ipOriginData[i];  /*将最小元素初始化为第i个元素*/
		for (j=i;j<iCount;j++)   /*j前面的数据已排好序,从j开始往后找到最小的元素*/
		{
			if (iMin>ipOriginData[j])
			{
				/*记录较小元素的值和下标*/
				k=j;
				iMin=ipOriginData[j];  
			}
		}
		/*将j后面最小的值和第i个元素交换位置*/
		ipOriginData[k]=ipOriginData[i];
		ipOriginData[i]=iMin;
	}
	/*输出排序后的元素*/
	printf("Select Sort Number:");
	for (i=0;i<iCount;i++)
	{
		printf("%d ",ipOriginData[i]);
	}
	printf("\n");

	return ;
}
//冒泡(起泡)法排序
//将序列划分为无序和有序区,不断通过交换较大元素至无序区尾完成排序。
void BubbleSort(int *ipOriginData,//[I]初始元素
				int iCount//[I]元素个数
				)
{
	int i=0;

	/*输出原始元素*/
	printf("Origin Number:");
	for (i=0;i<iCount;i++)
	{
		printf("%d ",ipOriginData[i]);
	}
	printf("\n");

	for (i=0;i<iCount-1;i++) /*共需要排序iCount-1次*/
	{
		int j=0;

		for (j=0;j<iCount-1-i;j++)
		{
			if (ipOriginData[j]>ipOriginData[j+1])/*将值较大的元素往下沉*/
			{
				int iTemp=0;

				iTemp=ipOriginData[j+1];
				ipOriginData[j+1]=ipOriginData[j];
				ipOriginData[j]=iTemp;
			}
		}
	}
	/*输出排序后的元素*/
	printf("Bubble Sort Number:");
	for (i=0;i<iCount;i++)
	{
		printf("%d ",ipOriginData[i]);
	}
	printf("\n");

	return ;
}
//直接插入排序
//将数组分为无序区和有序区两个区,然后不断将无序区的第一个元素按大小顺序插入到有序区中去,最终将所有无序区元素都移动到有序区完成排序。
void InsertSort(int *ipOriginData,//[I]初始元素
				int iCount//[I]元素个数
				)
{
	int i=0;

	/*输出原始元素*/
	printf("Origin Number:");
	for (i=0;i<iCount;i++)
	{
		printf("%d ",ipOriginData[i]);
	}
	printf("\n");

	for (i=1;i<iCount;i++)
	{
		int j=0;

		for (j=0;j<i;j++)
		{
			if (ipOriginData[i]<ipOriginData[j])
			{
				int m=0,iTemp=0;

				iTemp=ipOriginData[i];
				for (m=i;m>j;m--)
				{
					ipOriginData[m]=ipOriginData[m-1];
				}
				ipOriginData[j]=iTemp;
			}
		}
	}
	/*输出排序后的元素*/
	printf("Insert Sort Number:");
	for (i=0;i<iCount;i++)
	{
		printf("%d ",ipOriginData[i]);
	}
	printf("\n");

	return ;
}


void main( )
{
	int iOriginData[10]={3,2,6,7,5,1,0,4,9,8};

	//选择法排序
	SelectSort(iOriginData,10);
	//冒泡(起泡)法排序
	BubbleSort(iOriginData,10);
	//直接插入排序
	InsertSort(iOriginData,10);
	
	return ;
}

本文转载自:

共有 人打赏支持
_编程菜鸟_
粉丝 3
博文 105
码字总数 14021
作品 0
武汉
课程 | 利用 TensorFlow 实现排序和搜索算法

在 TensorFlow 更新到 1.3 版本之后,新添加了类似于一般编程语言的判断语句和循环语句,从而我们可以在 TensorFlow 图汇总实现类似于 C 语言或者 Python 语言的排序算法和搜索算法。本场 ch...

chen_h
2017/10/26
0
0
看图轻松理解数据结构与算法系列(选择排序)

前言 推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种排序等...

超人汪小建
08/16
0
0
看图轻松理解数据结构与算法系列(冒泡排序)

前言 推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种排序等...

超人汪小建
09/13
0
0
面试题36:数组中的逆序对

题目:在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。例如,有一个数组为Array[0..n] 其中有元素a[i],a[j...

嗯哼9925
2017/12/27
0
0
2017年末,腾讯,百度,华为,搜狗和滴滴面试题汇总

Java基础 集合类以及集合框架;HashMap与HashTable实现原理,线程安全性,hash冲突及处理算法;ConcurrentHashMap 进程和线程的区别;多线程与线程池 数据一致性如何保证;Synchronized关键字...

野梦M
2017/12/27
0
1

没有更多内容

加载失败,请刷新页面

加载更多

你为什么在Redis里读到了本应过期的数据

一个事故的故事 晚上睡的正香突然被电话吵醒,对面是开发焦急的声音:我们的程序在访问redis的时候读到了本应过期的key导致整个业务逻辑出了问题,需要马上解决。 看到这里你可能会想:这是不...

IT--小哥
今天
2
0
祝大家节日快乐,阖家幸福! centos GnuTLS 漏洞

yum update -y gnutls 修复了GnuTLS 漏洞。更新到最新 gnutls.x86_64 0:2.12.23-22.el6 版本

yizhichao
昨天
3
0
Scrapy 1.5.0之选择器

构造选择器 Scrapy选择器是通过文本(Text)或 TextResponse 对象构造的 Selector 类的实例。 它根据输入类型自动选择最佳的解析规则(XML vs HTML): >>> from scrapy.selector import Sele...

Eappo_Geng
昨天
2
0
Windows下Git多账号配置,同一电脑多个ssh-key的管理

Windows下Git多账号配置,同一电脑多个ssh-key的管理   这一篇文章是对上一篇文章《Git-TortoiseGit完整配置流程》的拓展,所以需要对上一篇文章有所了解,当然直接往下看也可以,其中也有...

morpheusWB
昨天
5
0
中秋快乐!!!

HiBlock
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部