c++的算法之选择排序,冒泡排序
1.选择排序
选择排序每次循环比较,遍历出所有的数,找出最值,然后和此时数组的第一个元素交换,只交换这一次,最终完成所有的数的排列
#include<stdio.h> #include<Windows.h> int main(void) { int a[] = { 123,234,213,112,456,342,222,111 };//定义一个数组 int len = sizeof(a) / sizeof(a[0]); //数组长度 /* 每次找到一个最值放到数组最前方,例如第一次循环放到a[0];第二次循环放到a[1]; 所以一共需要len-1次,就把所有的书排列完毕 */ for (int i = 0; i < len - 1; i++) { for (int j = i + 1; j < len; j++) { if (a[i] > a[j]) { //i是每次循环的第一个元素,j是下一个元素 int tmp = a[j]; a[j] = a[i]; a[i] = tmp; } } } for (int i = 0; i < len; i++) {//遍历数组每一个数 printf(" %d ", a[i]); } system("pause");//暂停 return 0; }
2.冒泡排序
从数组第一个数开始每两个数进行比较,若第一个数比第二个数大交换位置,在和下一个数比较,直到比较完最后一个,第一次循环结束,以此类推
#include<stdio.h> #include<Windows.h> int main(void) { int a[] = { 123,234,213,112,456,342,222,111 }; int len = sizeof(a) / sizeof(a[0]); //冒泡排序 for (int i = 0; i < len - 1; i++) { /* 每次循环完,最大值排到最后,数组总数减一.比如i=0,j=0时,排序完成后,最大值a[7]=456,最大值 a[7]固定不再参与比较,此时数组最大值为:a[len-i-1]即a[6];以此循环直至所有数排列完毕 */ for (int j = 0; j < len - 1 - i;j++) { if (a[j] > a[j + 1]) { int tmp = a[j]; a[j] = a[j + 1]; a[j + 1] = tmp; } } } for (int i = 0; i < len; i++) { printf(" %d ", a[i]); } system("pause"); return 0; }