字符串的冒泡排序。
P.s.冒泡排序百度百科:
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。
它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素已经排序完成。
这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。
给出C语言实现如下:
#include <stdio.h>
#include <string.h>
void bubblesort(char string[])
{
char temp;
int i,j;
int n = strlen(string);
for (i = 0; i < n-1; i++)
{
for (j = i+1; j<n; j++)
{
if (string [i] > string[j])
{
temp = string[i];
string[i] = string[j];
string[j] = temp;
}
}
}
}
int main (void)
{
char string[] = "the quick brown fox jumps over the lazy dog";
printf("Before:\"%s\"\n", string);
bubblesort(string);
printf("After:\"%s\"\n", string);
return 0;
}
/*
Before:"the quick brown fox jumps over the lazy dog"
After:" abcdeeefghhijklmnoooopqrrsttuuvwxyz"
*/
思路很简单,首先确定首位与第二位字符的大小顺序,并通过常见的设置中间变量并进行互相赋值达到小值在前大值在后的排序目的;
其次就是循环,对第二位字符与第三位字符(首位与第二位已经完成排序后)进行排序,同样是将小值排在大值前面;
然后就是循环,直到最大的值被排到整个字符串的最后一位。(注意,至此只是第一轮排序,因而只有最后一位确定是最大值)
随后进行第二轮排序。步骤与第一轮排序完全一致。在此轮排序结束后,整个字符串第二大的字符将被排到倒数第二位。
然后就是循环直到整个字符串从小到大正确排序。
举个简单的例子,排序的过程如下:
第0步: ‘cba d’
第1步: ‘ba cd’
第2步: ‘a bcd’
第3步: ‘ abcd’
值得注意的是,默认是按照ASCII表进行的。因而,空格被排在了所有字母字符之前。
关于ASCII对照表可参考: