更多课程 选择中心

C/C++培训
达内IT学院

400-996-5531

C++中冒泡排序和选择排序你了解多少?

  • 发布:C++培训
  • 来源:资料库
  • 时间:2020-08-28 14:39

冒泡排序原理

假设有10个数,第一轮循环,第一个数和第二个数比较,如果第一个数大,第一个数和第二个数交换位置,否则不动;接着第二个数和第三个数比较,如果第二个数大,第二个数和第三个数交换位置,否则不动……第九个数和第十个数比较,如果第九个数大,第九个数和第十个数交换位置,否则不动。第一轮循环结束,最大的数挪到了第十个数的位置,比较进行了9次。

第二轮循环,第一个数和第二个数比较,如果第一个数大,第一个数和第二个数交换位置,否则不动……第八个数和第九个数比较,如果第八个数大,第八个数和第九个数交换位置,否则不动。第二轮循环结束,第二大的数挪到了第九个数的位置,比较进行了8次。

……

第九轮循环,第一个数和第二个数比较,如果第一个数大,第一个数和第二个数交换位置,否则不动。第九轮循环结束,倒数第二大的数挪到了第二个数的位置,比较进行了1次。

总体原理:每轮比较找到最大的数。代码如下:

void BubbleSort(int arr[], int n)

{

int i, j, tmp;

for (i = 0; i < n - 1; ++i)

{

for (j = 1; j < n - i; ++j)

{

if (arr[j - 1] > arr[j])

{

//交换两个元素位置

tmp = arr[j - 1];

arr[j - 1] = arr[j];

arr[j] = tmp;

}

}

}

}

选择排序原理

假设有10个数,第一轮循环,第一个数和第二个数比较,如果第一个数大,第一个数和第二个数交换位置,否则不动;接着第一个数和第三个数比较,如果第一个数大,第一个数和第三个数交换位置,否则不动……第一个数和第十个数比较,如果第一个数大,第一个数和第十个数交换位置,否则不动。第一轮循环结束,最小的数挪到了第一个数的位置,比较进行了9次。

第二轮循环,第二个数和第三个数比较,如果第二个数大,第而个数和第三个数交换位置,否则不动……第二个数和第十个数比较,如果第二个数大,第二个数和第十个数交换位置,否则不动。第二轮循环结束,第二小的数挪到了第二个数的位置,比较进行了8次。

……

第九轮循环,第九个数和第十个数比较,如果第九个数大,第九个数和第十个数交换位置,否则不动。第九轮循环结束,倒数第二小的数挪到了倒数第二个的位置,比较进行了1次。

代码如下:

void SelectSort(int nArray[], int n)//匈牙利表示法 nWordLen, n_word_len

{

int i, j, min, tmp;

for (i = 0; i < n - 1; ++i)

{

min = i;

for (j = i + 1; j < n; ++j)

{

if (nArray[j] < nArray[min])

min = j;

}

if (min != i)

{

tmp = nArray[i];

nArray[i] = nArray[min];

nArray[min] = tmp;

}

}

}

int main()

{

int nArray[] = { 3, 7, -1, 0, 8, 13, 78, 100, -34, -4322, 9888};//按升序的方法进行排序

int i, n;

//sizeof nArray 是整个数组在内在中占用的字节数,sizeof nArray[0]是数组中第一个元素在内在中所占的字节数

n = sizeof nArray / sizeof nArray[0];//获取数组元素的个数

for (i = 0; i < n; ++i)

printf("%d ", nArray[i]);

printf("\n");

////使用冒泡排序

//printf("使用冒泡排序之后:\n");

//BubbleSort(nArray, n);

//for (i = 0; i < n; ++i)

// printf("%d ", nArray[i]);

//printf("\n");

printf("使用选择排序之后:\n");

SelectSort(nArray, n);

for (i = 0; i < n; ++i)

printf("%d ", nArray[i]);

printf("\n");

return 0;

}

当你还在担心能否就业时,达内学员提前被企业录取;当你转辗于各大招聘会时,达内学员收到了高薪offer;当你在各大招聘网站投递简历时,达内学员中有人一毕业进入五百强名企。所以选择很重要。找C++培训班,选达内就对了。

预约申请免费试听课

填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:C++ 算法题解:数组元素循环右移问题详解
下一篇:c语言进度式文件拷贝代码教程

超全的C语言标识符知识

C指针——指针类型转换

C指针——指针和结构类型的关系

C指针——数组和指针的关系

Copyright © 2023 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
黑龙江省

吉林省

河北省

湖南省

贵州省

云南省

广西省

海南省