码迷,mamicode.com
首页 > 编程语言 > 详细

C 冒泡排序 选择排序

时间:2016-06-09 00:50:17      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:c 冒泡排序 选择排序




数组的冒泡排序与选择排序

chunli@ubuntu:~/select$ cat main.c 
#include <stdio.h>
#include <stdlib.h>

int swap_conut  = 0 ;	//记录交换次数
int loop_count  = 0 ;	//记录循环次数
void swap(int *a,int *b)	//指针级 数据交换
{	//一个数连续异或同样的数两次,还是这个数
	//相同位结果为0,不同位结果为1
	*a = *a ^ *b;
	*b = *a ^ *b;
	*a = *a ^ *b;
	swap_conut++;
}

int minkey(int array[],int low,int high)//在指定范围内,返回数组中最小数的下标
{
	int key = array[low];
	int min = low;
	for(int i = low+1;i<high ;i++)
	{
		loop_count++;
		if(key > array[i])
		{
			key = array[i];
			min = i;
		}
	}
	return min;
}
void select(int array[],int high)		//选择排序
{
	for(int i = 0;i<high;i++)
	{
		int j = minkey(array,i,high);	//在i到high之间,返回最小数的下标
		if(j!=i)
		{
			swap(&array[j],&array[i]);	
		}
	}
}

void bubble(int array[],int len)
{
	for(int i = 0;i<len;i++)			//外循环次数
	{	
		for(int j = 0;j<len-i-1;j++)		//内循环每次比外循环少一次,巧妙减1
		{
			loop_count++;
			if(array[j] > array[j+1])	//需要加1,上面的减一,巧妙的防止越界
			{
				swap(&array[j],&array[j+1]);
			}
		}
	}
}

void traverse(int *array,int high)		//遍历数组
{
	for(int i = 0;i<high;i++)
	{
		printf("%d \n",array[i]);
	}
}

int main()
{
	int array[] = {9,8,7,6,5,4,3,2,1,0};
	select(array,sizeof(array)/sizeof(int));	//开始排序
	printf("选择法:交换次数%d ,循环次数 %d\n",swap_conut,loop_count);
	traverse(array,sizeof(array)/sizeof(int));	//遍历输出

	loop_count = 0;
	swap_conut = 0;
	int array1[] = {9,8,7,6,5,4,3,2,1,0};
	bubble(array1,sizeof(array1)/sizeof(int));	//开始排序
	printf("冒泡法:交换次数%d ,循环次数 %d\n",swap_conut,loop_count);
	traverse(array1,sizeof(array1)/sizeof(int));	//遍历输出

	return 0;
}


编译运行:
chunli@ubuntu:~/select$ gcc  -std=c99 main.c && ./a.out 
选择法:交换次数5 ,循环次数 45
0 
1 
2 
3 
4 
5 
6 
7 
8 
9 
冒泡法:交换次数45 ,循环次数 45
0 
1 
2 
3 
4 
5 
6 
7 
8 
9


本文出自 “魂斗罗” 博客,请务必保留此出处http://990487026.blog.51cto.com/10133282/1787583

C 冒泡排序 选择排序

标签:c 冒泡排序 选择排序

原文地址:http://990487026.blog.51cto.com/10133282/1787583

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!