数组的遍历
#include <iostream>
using namespace std;
int main(){
double arr[] = {1, 2, 3, 4, 5, 6,7, 9};
cout << sizeof(arr)<< endl;
cout << sizeof(arr[0])<< endl;// 整个数组占用的空间
int len =sizeof(arr)/sizeof(arr[0]); // 一个元素占用的空间
// 数组的遍历 : 将数组元素一个一个取出然后进行某些操作
// for (int i = 0; i < len; ++i) {
// cout << arr[i] << endl;
// }
//
for (int i = 0; i < len; ++i) {
if (arr[i] == 7)
cout << "7 在数组里面呢"<< endl;
}
}
求数组的最大值
#include <iostream>
using namespace std;
int main(){
// 五只小猪称重 谁最重
// 就是求数组中的最大值
// int arr[6] = {1300,350,200,400,250, 3200};
int arr[6];
cout << "请分别输入6只猪猪的重量"<<endl;
// 1300 350 22200 400 250 3200
for (int i = 0; i < 6; ++i)
cin >> arr[i];
int maxWeight = arr[0]; // 假设第一只猪最重
int index = -1;
int len = sizeof(arr)/sizeof(arr[0]);
for (int i = 0; i < len; ++i) {
if (arr[i] >= maxWeight){
maxWeight = arr[i];
index = i+1;
}
}
cout << "最重的小猪是第: "<< index <<"只 重量是: "<<maxWeight <<" kg"<<endl;
}
反转数组
#include <iostream>
using namespace std;
int main(){
// 交换两个变量
// int a = 100;
// int b = 300;
// int temp;
// temp = a;
// a = b;
// b = temp;
// cout << a<< endl;
// cout << b<< endl;
int arr[] = {1, 3, 5, 2, 4, 29, 47, 33};
// 反转数组
int len = sizeof(arr)/sizeof(arr[0]);
for (int i = 0; i < len/2; ++i) {
int temp;
temp = arr[i];
arr[i] = arr[len-1-i];
arr[len-1-i] = temp;
}
for (int i = 0; i < len; ++i) {
cout << arr[i]<< "\t";
}
}
方法二
#include <iostream>
using namespace std;
int main(){
int arr[] = {1, 3, 5, 2, 4, 29, 47, 33};
// 反转数组
int len = sizeof(arr)/sizeof(arr[0]);
int temp;
// for (int min=0, max=len-1;min <= max ;max--, min++ ) {
for (int left=0, right=len-1;left <= right ;right--, left++ ) {
// 交换
temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
}
for (int i = 0; i < len; ++i) {
cout << arr[i]<< "\t";
}
}
冒泡排序
冒泡排序就是重复“从序列右边开始比较相邻两个数字的大小,再根据结果交换两个数字
的位置”这一操作的算法。在这个过程中,数字会像泡泡一样,慢慢从右往左“浮”到序列的
顶端,所以这个算法才被称为“冒泡排序”。
在冒泡排序中,第 1 轮需要比较 n -1 次,第 2 轮需要比较 n -2 次……第 n -1 轮需
要比较 1 次。因此,总的比较次数为 (n -1) +(n -2) +…+1 ≈ n^2
/2。这个比较次数恒定为该数值,和输入数据的排列顺序无关。
不过,交换数字的次数和输入数据的排列顺序有关。假设出现某种极端情况,如输
入数据正好以从小到大的顺序排列,那么便不需要任何交换操作;反过来,输入数据要
是以从大到小的顺序排列,那么每次比较数字后便都要进行交换。因此,冒泡排序的时
间复杂度为 O(n^2)。
一层循环/右侧开始版
#include <iostream>
using namespace std;
int main(){
int arr[] = { 4,2,8,6,5,7,9, 1,3 };
int len = sizeof(arr)/sizeof(arr[0]);
for (int j = len-1; j > 0; --j) {
if (arr[j-1] > arr[j]){
int temp = arr[j-1];
arr[j-1] = arr[j];
arr[j] = temp;
}
}
for (int i = 0; i < len; ++i) {
cout << arr[i]<< "\t";
}
cout << endl;
cout << "====================================="<< endl;
for (int j = len-1; j > 1; --j) {
if (arr[j-1] > arr[j]){
int temp = arr[j-1];
arr[j-1] = arr[j];
arr[j] = temp;
}
}
for (int i = 0; i < len; ++i) {
cout << arr[i]<< "\t";
}
cout << endl;
cout << "====================================="<< endl;
for (int j = len-1; j > 2; --j) {
if (arr[j-1] > arr[j]){
int temp = arr[j-1];
arr[j-1] = arr[j];
arr[j] = temp;
}
}
for (int i = 0; i < len; ++i) {
cout << arr[i]<< "\t";
}
cout << endl;
cout << "====================================="<< endl;
for (int j = len-1; j > 3; --j) {
if (arr[j-1] > arr[j]){
int temp = arr[j-1];
arr[j-1] = arr[j];
arr[j] = temp;
}
}
for (int i = 0; i < len; ++i) {
cout << arr[i]<< "\t";
}
cout << endl;
cout << "====================================="<< endl;
for (int j = len-1; j > 4; --j) {
if (arr[j-1] > arr[j]){
int temp = arr[j-1];
arr[j-1] = arr[j];
arr[j] = temp;
}
}
for (int i = 0; i < len; ++i) {
cout << arr[i]<< "\t";
}
cout << endl;
cout << "====================================="<< endl;
}
两层最右版
#include <iostream>
using namespace std;
int main(){
int arr[] = { 4,2,8,6,5,7,9, 1,3 };
int len = sizeof(arr)/sizeof(arr[0]);
for (int i = 0; i < len-1; ++i) {
for (int j = len-1; j > 0; --j) {
if (arr[j-1] > arr[j]){
int temp = arr[j-1];
arr[j-1] = arr[j];
arr[j] = temp;
}
}
for (int i = 0; i < len; ++i) {
cout << arr[i]<< "\t";
}
cout << endl;
cout << "====================================="<< endl;
}
}
左侧开始版
#include <iostream>
using namespace std;
int main(){
int arr[] = { 4,2,8,0,5,7,9, 1,3 };
int len = sizeof(arr)/sizeof(arr[0]);
// len-1-i 每次最右面的值是最大的,不用比较
for (int i = 0; i < len-1; ++i) {
for (int j = 0; j < len-1-i; ++j) {
if (arr[j] > arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
for (int i = 0; i < len; ++i) {
cout << arr[i]<< "\t";
}
}
网友评论