#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();
}
}
分享到:
相关推荐
8种基本排序算法2015上
里面有插入、快速、希尔、归并、选择、冒泡(也含有双向冒泡)、堆排序算法(C语言算法),对一些初学者有帮助。里面还有一些基于链表的排序算法。
基本排序算法比较与选择 冒泡排序 快速排序 直接选择排序 堆排序 直接插入排序 希尔排序 归并排序 基数排序
几种基本排序算法的运行时间比较 /* *Copyright dongbo *All rights reserved. * *文件名称: 基本排序实现 *功 要: 实现 直接插入排序;简单排序 ;冒泡排序 ;快速排序 及所用时间比较 * *当前版本: 1.0 */
各种基本排序算法思路介绍.pdf各种基本排序算法思路介绍.pdf各种基本排序算法思路介绍.pdf各种基本排序算法思路介绍.pdf各种基本排序算法思路介绍.pdf各种基本排序算法思路介绍.pdf
本文档是一个关于基本排序算法的综合实验报告,包括实验条件、源程序代码、算法实现等内容。下面我们将对实验报告中涉及的知识点进行详细的解释和分析。 一、实验条件 实验条件是指进行排序算法实验的硬件和软件...
基本排序法的实现及测试,对快速排序 插入排序 选择排序 堆排序 归并排序这几种排序法的实现,同时使用一个简单的测试函数进行测试并打出测试结果。
用c#语言重写的基本排序算法,里面包含冒泡排序,鸡尾酒排序(双向冒泡),选择排序,插入排序,希尔排序,堆排序,归并排序这几个排序算法。程序可以直接运行。
sorting_algorithms_py, 在 python 中,基本排序算法 简单 sorting_algorithms_py用 python 编写的基本排序算法。 代码简单易于理解。平均复杂度 !查看常见排序算法的平均 Big-O 复杂度:快速排序:O ( n log(n) )...
基本排序算法综合实验.doc
基本排序算法C语言实现 在这里,你能找到基本算法的高效实现! 包括:冒泡排序C代码、堆排序C代码、插入排序C代码、 选择排序C代码、归并排序C代码、快速排序C代码
六种基本排序算法,堆,归并,希尔,快速排序等
五大基本排序算法,算法数据结构(02) 五大常用算法
五大基本排序算法,算法数据结构(01) 五大常用算法
java基本排序算法实现,包括快速 选择 插入 希尔 堆 冒泡 交换
6种基本排序算法(插入,冒泡,快速,希尔,堆,归并),有详细描述和算法分析
几种基本排序算法的实现.doc
Java基础复习笔记11基本排序算法。~~~~~~
最新10.1几种基本排序算法的实现.pdf