C/C++培训
达内IT学院
400-996-5531
冒泡排序原理
假设有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++培训班,选达内就对了。
填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!
Copyright © 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有
Tedu.cn All Rights Reserved