#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();
}
}
分享到:
相关推荐
本文将详细介绍七种基本排序算法,包括插入排序、快速排序、希尔排序、归并排序、选择排序、冒泡排序(以及双向冒泡排序)和堆排序,这些都是用C语言实现的。对于初学者来说,理解和掌握这些算法有助于提升编程技能...
根据提供的信息,我们可以总结出以下关于八种基本排序算法中的两种——冒泡排序(Bubble Sort)与插入排序(Insert Sort)的知识点。 ### 冒泡排序(Bubble Sort) #### 定义 冒泡排序是一种简单的排序算法。它...
本文将详细探讨C#语言中实现的几种基本排序算法,包括冒泡排序、鸡尾酒排序(双向冒泡)、选择排序、插入排序、希尔排序、堆排序和归并排序。 首先,我们来看**冒泡排序**,它是最简单的排序算法之一。通过不断交换...
本文将深入探讨在C语言中实现的几种基本排序算法,包括冒泡排序、插入排序、选择排序、快速排序、希尔排序以及归并排序。这些算法各有优劣,适用于不同的场景。 1. 冒泡排序(Bubble Sort) 冒泡排序是一种简单的...
以下是标题"java实现的八种基本排序算法(有注释)"所涵盖的八种排序算法的详细说明: 1. **冒泡排序(Bubble Sort)**: 冒泡排序是一种简单的交换排序,通过不断比较相邻元素并交换位置,使最大或最小的元素逐渐...
几种基本排序算法的运行时间比较 /* *Copyright dongbo *All rights reserved. * *文件名称: 基本排序实现 *功 要: 实现 直接插入排序;简单排序 ;冒泡排序 ;快速排序 及所用时间比较 * *当前版本: 1.0 */
本文档是一个关于基本排序算法的综合实验报告,包括实验条件、源程序代码、算法实现等内容。下面我们将对实验报告中涉及的知识点进行详细的解释和分析。 一、实验条件 实验条件是指进行排序算法实验的硬件和软件...
【五大基本排序算法详解】 排序算法是计算机科学中不可或缺的一部分,它们用于整理和组织数据,使其按照特定的顺序排列。本文将详细介绍五大基本排序算法,包括选择排序、冒泡排序和快速排序,这些都是数据结构和...
本资源“基本排序算法C语言实现”提供了一系列经典的排序算法的C语言实现,帮助开发者深入理解这些算法的工作原理并能实际运用到项目中。 1. **冒泡排序**: 冒泡排序是一种简单的排序算法,它重复地遍历要排序的...
本教程“MFC基于C++语言的三种基本排序算法的动态演示”着重介绍了如何在MFC环境下实现并可视化三种经典的排序算法:冒泡排序、插入排序和选择排序。 **冒泡排序**是一种简单的排序算法,通过重复遍历待排序的序列...
本文将详细讨论C/C++语言实现的基本排序算法,并结合Visual Studio(VS)2008的调试环境进行实践。 首先,我们要理解排序的定义:排序是将一组数据按照特定的顺序排列的过程。在计算机科学中,常见的排序标准有升序...
sorting_algorithms_py, 在 python 中,基本排序算法 简单 sorting_algorithms_py用 python 编写的基本排序算法。 代码简单易于理解。平均复杂度 !查看常见排序算法的平均 Big-O 复杂度:快速排序:O ( n log(n) )...
这篇文档是关于几种基本排序算法的实现,包括直接插入排序、冒泡排序、简单选择排序、快速排序、希尔排序和堆排序。这些排序算法是计算机科学中基础且重要的概念,广泛应用于数据处理和算法设计中。 1. 直接插入...
本项目涵盖了五种基本的排序算法:快速排序、插入排序、选择排序、堆排序和归并排序,并提供了测试用例来验证这些算法的正确性。 **快速排序**(Quick Sort): 快速排序是一种高效的排序算法,由C.A.R. Hoare在...
包括_基础数据结构leetcode基本搜索算法基本排序算法Java8_stream_java_basic
本文主要介绍了四种基本的排序算法:冒泡排序、简单选择排序、插入排序以及希尔排序。 1. 冒泡排序: 冒泡排序是一种简单的排序算法,其核心思想是通过重复遍历待排序的数列,比较相邻的两个元素并根据需要交换它们...
基本排序算法实现(冒泡,插入排序,快排,希尔排序,堆排序,计数排序,等等)_SortCode
最新10.1几种基本排序算法的实现.pdf
在IT领域,排序算法是计算机科学中的基础概念,尤其在编程语言如C++中,掌握各种排序算法对于提升程序效率至关重要。本篇文章将详细讲解四种排序算法:冒泡排序、插入排序、选择排序以及一种更高级的排序算法。 ...
这里我们将深入探讨六种基本的排序算法:冒泡排序、插入排序、选择排序、希尔排序、堆排序以及归并排序,这些都是快速排序算法的基础。下面,我们将逐一介绍这些算法的工作原理、效率特点及其应用场景。 1. **冒泡...