选择排序和冒泡排序

来源:互联网 发布:js pageyoffset 编辑:程序博客网 时间:2024/05/29 17:24

今天开始写博客,加油。


1冒泡排序

我没有选择使用函数,而是分成了一个个程序去写,一是因为函数我自己本来也不熟练,二是感觉分开来写更加的清晰

1,冒泡排序1

/*

 *2017年7月11日17:28:13
 *目的:冒泡排序1  (以增序为列)
 *思路:**这种冒泡排序核心思想等同于选择排序,但并不会提取最值,
比较次数等同于选择排序法,但明显劣与选择排序,因为数据交换量比选择排序多的多。
1)创建一个数组,提取第一个值arr[0],依次与后面的变量进行比较
   若arr[0]>arr[n],则交换arr[0]与arr[n]。
2)重复比较直到a[n-1]结束。
 * */


#include<stdio.h>




int main()
{
int a[10] = {10,9,8,7,6,5,4,3,2,1};
int i,j,temp;


for(i=0;i<9;i++)   //外部循环,循环n-1次,每循环一次,排序第n个数
{
for(j=i+1;j<=9;j++)   //内部循环,逐个比较
{
if (a[i]>=a[j])
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
for(i=0;i<=9;i++)
printf(i!=9?"%-5d":"%d\n",a[i]);   //三目运算符


return 0;

}


2冒泡排序2

/*
 * 2017年7月11日17:59:24
 * 目的:冒泡排序2/沉底排序  (以自增为列)
 * 思路:**这种排序方法与第一种冒泡排序方法相比,思路不同。
 *       但是比较次数和数据转换次数都是相同的,所以也称为顶外一种冒泡排序法
 *  1)创建一个数组,依次比较第a[j]和a[j+1]的值(初始j为0),若a[j]<a[j+1],则交换a[j]和a[j+1]的值,知道j=n-1结束,
 * 确保一次循环后,数组的最后一个值是这个数组的最大值。
 *  2)排除数组对最后一个数的考虑。
 *  3)循环1),直到待考虑的数组个数为1时。
 * */


#include<stdio.h>


int main()
{
int a[10] = {10,9,8,7,6,5,4,3,2,1};
int i,j,temp;


for(i=0;i<9;i++)    //  外部循环,每循环一次,数组排序好最后一个考虑范围内的数。
{
for(j=0;j<9-i;j++)   //  这里的判断条件比较那计算,要考虑存在a[j+1]的情况,
{
if(a[j]>a[j+1])
{
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}


for (i=0;i<=9;i++)
printf(i!=9?"%-5d":"%d\n",a[i]);


return 0;
}

2选择排序

/*
 * 2017年7月11日15:53:58
 * 目的:选择排序的学习   (以增序为列)
 * 思路;1)建立一个数组,选择一个标杆为a[min],循环比较其余aar[n],若arr[min]>=arr[j],则交换。
 * 循环结束,查找到了最小值,并寄存在arr[0]的变量中。
 *  2)把arr[1]的值放到标杆a[min]中,循环比较arr[1]后的值,查找到其余arr[1]到arr][n]中的
 *  最小值,并寄存在arr[民]的变量中。
 *  3)重复2)直到数组arr[n-1]结束。
 * */


#include <stdio.h>




int main()
{
int arr[10] = {10,9,8,7,6,5,4,3,2,1};
int i,j,min,temp;

for(i=0;i<9;i++)    //外部循环,循环n-1次,每循环n次,排序第n个数
{
min = i;//  给带排序数赋值
for (j=i+1;j<=9;j++)      //内部循环,选择出未排序的数中的最小值
{
if (arr[min] >=  arr[j])  
min = j;
}
if (i != min)     //最小值与待排序数进行比较
{
temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}
for (i=0;i<=9;i++)
{
printf((i!=9?"%-5d":"%d\n"),arr[i]);
}


return 0;


}

原创粉丝点击