`
shoppingbill
  • 浏览: 59665 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

基本排序算法

阅读更多
#include<stdio.h>
#define MAX 10
#define SWAP(x,y){int t; t=x; x=y; y=t;}
void selsort(int[]);//选择排序
void insort(int[]);//插入排序
void bubsort(int[]);//冒泡排序
/**
 *标题:3.	编写一个C程序,实现对10个整数进行升序排序输出(排序算法不限,要求用数组实现)。
 *说明:此题选择排序(Selection sort)、插入排序(Insertion sort)与气泡排序(Bubble sort)这三个排序方式是初学排序所必须知道的三个基本排序方式,它们由于速度不快而不实用(平均与最快的时间复杂度都是O(n2))
 *作者:张玉
 *创建时间:2010-11-08 22:28
 **/
int main(void){
	
	int number[MAX] = {0};
	int i;
	
	printf("排序前:");
	for(i = 0; i < MAX; i++){
		number[i] = rand() % 100;
		printf("%d ",number[i]);
	}
	printf("\n请选择排序方式:\n");
	printf("(1)选择排序\n(2)插入排序\n(3)冒泡排序\n:");

	scanf("%d",&i);
	
	switch(i){
		case 1:
			selsort(number);
			break;
		case 2:
			insort(number);
			break;
		case 3:
			bubsort(number);
			break;
		default:
			printf("选项错误(1..3)\n");
	}
	return 0;
}

/**
 *名称:选择排序
 *说明:将要排序的对象分为2个部分,一个是已排序的部分,二个是未排序的部分。将尾端未排序的部分选择一个最小值,放到前端已排序部分的最后一个
 *例如:排序前:70 80 31 37 10 1 48 60 33 80
 *[1] 80 31 37 10 70 48 60 33 80 选出最小值1 
 *[1 10] 31 37 80 70 48 60 33 80 选出最小值10 
 *[1 10 31] 37 80 70 48 60 33 80 选出最小值31 
 *[1 10 31 33] 80 70 48 60 37 80 ...... 
 *[1 10 31 33 37] 70 48 60 80 80 ...... 
 *[1 10 31 33 37 48] 70 60 80 80 ...... 
 *[1 10 31 33 37 48 60] 70 80 80 ...... 
 *[1 10 31 33 37 48 60 70] 80 80 ...... 
 *[1 10 31 33 37 48 60 70 80] 80 ...... 
 *
 **/
void selsort(int number[]){
	int i, j, k, m;
	for(i = 0; i < MAX-1; i++){
		m=i;
		for(j = i+1; j < MAX; j++)
			if(number[j] < number[m])
				m = j;
		if(i !=m)
			SWAP(number[i],number[m]);
		printf("第 %d 次排序:",i+1);
		for(k = 0; k < MAX; k++)
			printf("%d ",number[k]);
		printf("\n");

		getchar();
	}

}

/**
 *名称:插入排序
 *说明:像是玩朴克一样,我们将牌分作两堆,每次从后面一堆的牌抽出最前端的牌,然后插入前面一堆牌的适当位置
 *例如:排序前:92 77 67 8 6 84 55 85 43 67
 *[77 92] 67 8 6 84 55 85 43 67 将77插入92前 
 *[67 77 92] 8 6 84 55 85 43 67 将67插入77前 
 *[8 67 77 92] 6 84 55 85 43 67 将8插入67前 
 *[6 8 67 77 92] 84 55 85 43 67 将6插入8前 
 *[6 8 67 77 84 92] 55 85 43 67 将84插入92前 
 *[6 8 55 67 77 84 92] 85 43 67 将55插入67前 
 *[6 8 55 67 77 84 85 92] 43 67 ...... 
 *[6 8 43 55 67 77 84 85 92] 67 ...... 
 *[6 8 43 55 67 67 77 84 85 92] ...... 
 *
 **/
void insort(int number[]){
	int i, j, k, tmp;
	for(j = 1; j < MAX; j++){
		tmp = number[j];
		i = j - 1;
		while(tmp < number[i]){
			number[i+1] = number[i];
			i--;
			if( i == -1)
				break;
		}

		number[i+1] = tmp;
		printf("第 %d 次排序:",j);
		for(k = 0; k < MAX; k++)
			printf("%d ",number[k]);
		printf("\n");

		getchar();
	}

}

/**
 *名称:冒泡排序
 *说明:在排序是最大的元素会如同气泡一样移至右端,其利用比较相邻元素的方法,将大的元素交换至右端,所以大的元素会不断地往后移动,直到适当的位置为止
 *例如:排序前:95 27 90 49 80 58 6 9 18 50
 *27 90 49 80 58 6 9 18 50 [95] 95浮出 
 *27 49 80 58 6 9 18 50 [90 95] 90浮出 
 *27 49 58 6 9 18 50 [80 90 95] 80浮出 
 *27 49 6 9 18 50 [58 80 90 95] ...... 
 *27 6 9 18 49 [50 58 80 90 95] ...... 
 *6 9 18 27 [49 50 58 80 90 95] ...... 
 *6 9 18 [27 49 50 58 80 90 95] 由于接下来不会再发生交换动作,排序提早结束
 *
 **/
void bubsort(int number[]){
	
	int i, j, k, flag = 1;
	for(i = 0; i < MAX-1 && flag == 1; i++){
		flag = 0;
		for(j = 0; j < MAX-i-1; j++){
			if(number[j+1] < number[j]){
				SWAP(number[j+1],number[j]);
				flag = 1;
			}
		}
		printf("第 %d 次排序:",i+1);
		for(k = 0; k < MAX; k++)
			printf("%d ",number[k]);
		printf("\n");

		getchar();
	}	
}

 

分享到:
评论

相关推荐

    7种基本排序算法

    本文将详细介绍七种基本排序算法,包括插入排序、快速排序、希尔排序、归并排序、选择排序、冒泡排序(以及双向冒泡排序)和堆排序,这些都是用C语言实现的。对于初学者来说,理解和掌握这些算法有助于提升编程技能...

    8种基本排序算法2015上

    根据提供的信息,我们可以总结出以下关于八种基本排序算法中的两种——冒泡排序(Bubble Sort)与插入排序(Insert Sort)的知识点。 ### 冒泡排序(Bubble Sort) #### 定义 冒泡排序是一种简单的排序算法。它...

    c#实现基本排序算法

    本文将详细探讨C#语言中实现的几种基本排序算法,包括冒泡排序、鸡尾酒排序(双向冒泡)、选择排序、插入排序、希尔排序、堆排序和归并排序。 首先,我们来看**冒泡排序**,它是最简单的排序算法之一。通过不断交换...

    基本排序算法(c语言版)

    本文将深入探讨在C语言中实现的几种基本排序算法,包括冒泡排序、插入排序、选择排序、快速排序、希尔排序以及归并排序。这些算法各有优劣,适用于不同的场景。 1. 冒泡排序(Bubble Sort) 冒泡排序是一种简单的...

    java实现的八种基本排序算法(有注释)

    以下是标题"java实现的八种基本排序算法(有注释)"所涵盖的八种排序算法的详细说明: 1. **冒泡排序(Bubble Sort)**: 冒泡排序是一种简单的交换排序,通过不断比较相邻元素并交换位置,使最大或最小的元素逐渐...

    基本排序算法比较

    几种基本排序算法的运行时间比较 /* *Copyright dongbo *All rights reserved. * *文件名称: 基本排序实现 *功 要: 实现 直接插入排序;简单排序 ;冒泡排序 ;快速排序 及所用时间比较 * *当前版本: 1.0 */

    基本排序算法综合实验.docx

    本文档是一个关于基本排序算法的综合实验报告,包括实验条件、源程序代码、算法实现等内容。下面我们将对实验报告中涉及的知识点进行详细的解释和分析。 一、实验条件 实验条件是指进行排序算法实验的硬件和软件...

    五大基本排序算法,算法数据结构(01)

    【五大基本排序算法详解】 排序算法是计算机科学中不可或缺的一部分,它们用于整理和组织数据,使其按照特定的顺序排列。本文将详细介绍五大基本排序算法,包括选择排序、冒泡排序和快速排序,这些都是数据结构和...

    基本排序算法C语言实现

    本资源“基本排序算法C语言实现”提供了一系列经典的排序算法的C语言实现,帮助开发者深入理解这些算法的工作原理并能实际运用到项目中。 1. **冒泡排序**: 冒泡排序是一种简单的排序算法,它重复地遍历要排序的...

    MFC 基于C++语言的三种基本排序算法的动态演示

    本教程“MFC基于C++语言的三种基本排序算法的动态演示”着重介绍了如何在MFC环境下实现并可视化三种经典的排序算法:冒泡排序、插入排序和选择排序。 **冒泡排序**是一种简单的排序算法,通过重复遍历待排序的序列...

    基本排序法C/C++实现,VS调试

    本文将详细讨论C/C++语言实现的基本排序算法,并结合Visual Studio(VS)2008的调试环境进行实践。 首先,我们要理解排序的定义:排序是将一组数据按照特定的顺序排列的过程。在计算机科学中,常见的排序标准有升序...

    sorting_algorithms_py, 在 python 中,基本排序算法 简单.zip

    sorting_algorithms_py, 在 python 中,基本排序算法 简单 sorting_algorithms_py用 python 编写的基本排序算法。 代码简单易于理解。平均复杂度 !查看常见排序算法的平均 Big-O 复杂度:快速排序:O ( n log(n) )...

    几种基本排序算法的实现.doc

    这篇文档是关于几种基本排序算法的实现,包括直接插入排序、冒泡排序、简单选择排序、快速排序、希尔排序和堆排序。这些排序算法是计算机科学中基础且重要的概念,广泛应用于数据处理和算法设计中。 1. 直接插入...

    基本排序法的实现及测试

    本项目涵盖了五种基本的排序算法:快速排序、插入排序、选择排序、堆排序和归并排序,并提供了测试用例来验证这些算法的正确性。 **快速排序**(Quick Sort): 快速排序是一种高效的排序算法,由C.A.R. Hoare在...

    包括_基础数据结构leetcode基本搜索算法基本排序算法Java8_stream_java_basic.zip

    包括_基础数据结构leetcode基本搜索算法基本排序算法Java8_stream_java_basic

    各种基本排序算法思路介绍.pdf

    本文主要介绍了四种基本的排序算法:冒泡排序、简单选择排序、插入排序以及希尔排序。 1. 冒泡排序: 冒泡排序是一种简单的排序算法,其核心思想是通过重复遍历待排序的数列,比较相邻的两个元素并根据需要交换它们...

    基本排序算法实现(冒泡,插入排序,快排,希尔排序,堆排序,计数排序,等等)_SortCode.zip

    基本排序算法实现(冒泡,插入排序,快排,希尔排序,堆排序,计数排序,等等)_SortCode

    最新10.1几种基本排序算法的实现.pdf

    最新10.1几种基本排序算法的实现.pdf

    C++基本排序算法,教你简单的逻辑排序

    在IT领域,排序算法是计算机科学中的基础概念,尤其在编程语言如C++中,掌握各种排序算法对于提升程序效率至关重要。本篇文章将详细讲解四种排序算法:冒泡排序、插入排序、选择排序以及一种更高级的排序算法。 ...

    六种基本排序算法,堆,归并,希尔,快速排序等

    这里我们将深入探讨六种基本的排序算法:冒泡排序、插入排序、选择排序、希尔排序、堆排序以及归并排序,这些都是快速排序算法的基础。下面,我们将逐一介绍这些算法的工作原理、效率特点及其应用场景。 1. **冒泡...

Global site tag (gtag.js) - Google Analytics