关于冒泡

一、将一个整形数组排序:

数组在传参时应该注意:


我们也可以使用指针的方法来进行实现:

定义两个指针:头指针和尾指针

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
void bubble_sort(int a[], int size)
{
	assert(a);
	int *start = a;    //定义头指针
	int *end = a + size - 1;//定义尾指针
	while (end > a){     //至少是在第二个,所以要大于第一个
		int flag = 0;     //定义标志位
		for (start = a; start < end; start++)
		{
			if (*start>*(start + 1))    
			{
				flag = 1;
				*start ^= *(start + 1);  
				*(start + 1) ^= *start;
				*start ^= *(start + 1);
			}
		}
		if (flag == 0)   //若标志位不变则说明本身就为有序的
		{
			break;
		}
		end--;    // 进行了一次冒泡,已经将最大的值放在最右侧,将尾指针减1,下一次冒泡则不用再冒这个
	}
}
int main()
{

	int a[] = { 12, 2, 23, 45, 6, 78, 4, 6, 10 };
	int size = sizeof(a) / sizeof(a[0]);
	bubble_sort(a, size);
	system("pause");
	return 0;
}

二、写冒泡排序可以排序多个字符串。

在内部循环(j<size-1-i):在这里-i是因为经历一次外部循环方可找出排序出一个最大的字符串,那么在下一次,就不用再让它进行比较

#include<stdio.h>
#include<stdlib.h>
void string_sort(char *str[],int size)
{
	int i = 0;
	for (i = 0; i < size - 1; i++)  //控制外部循环次数
	{
		int flag = 0;   //设标志位位
		int j = 0;
		for (j = 0; j < size - 1 - i; j++)  //控制内部循环次数,
		{
			if (strcmp(*(str+j), *(str+j+1))>0)  //判断是否需要交换
			{
				flag = 1;
				char *tmp = *(str + j);
				*(str + j) = *(str + j + 1);
				*(str + j + 1) = tmp;
			}
		}
		if (flag == 0)   //若标志位不变,则说明已经为有序
			break;
	}
}
int main()
{
	char *str[] = { "hskd", "abcd", "weqo" };
	int size = sizeof(str) / sizeof(str[0]); //计算字符串长度
	string_sort(str, size);
	int i= 0;
	for (i = 0; i < size; i++)
	{
		printf("%s\n", *(str+i));   //打印字符串
	}
	system("pause");
	return 0;
}

阅读更多
文章标签: 冒泡排序
个人分类: c语言
上一篇写一个函数,每次用一次函数,就会将num的值增加1,。
下一篇三子棋小游戏~(人机)
想对作者说点什么? 我来说一句

关于C++的word文档

2009年12月22日 141KB 下载

js冒泡事件测试

2013年04月15日 632B 下载

没有更多推荐了,返回首页

关闭
关闭