數(shù)組的遍歷
#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;// 整個數(shù)組占用的空間
int len =sizeof(arr)/sizeof(arr[0]); // 一個元素占用的空間
// 數(shù)組的遍歷 : 將數(shù)組元素一個一個取出然后進行某些操作
// for (int i = 0; i < len; ++i) {
// cout << arr[i] << endl;
// }
//
for (int i = 0; i < len; ++i) {
if (arr[i] == 7)
cout << "7 在數(shù)組里面呢"<< endl;
}
}
求數(shù)組的最大值
#include <iostream>
using namespace std;
int main(){
// 五只小豬稱重 誰最重
// 就是求數(shù)組中的最大值
// 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]; // 假設(shè)第一只豬最重
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;
}
反轉(zhuǎn)數(shù)組
#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};
// 反轉(zhuǎn)數(shù)組
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};
// 反轉(zhuǎn)數(shù)組
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";
}
}
冒泡排序
冒泡排序就是重復(fù)“從序列右邊開始比較相鄰兩個數(shù)字的大小贼急,再根據(jù)結(jié)果交換兩個數(shù)字
的位置”這一操作的算法锡足。在這個過程中种樱,數(shù)字會像泡泡一樣儿惫,慢慢從右往左“浮”到序列的
頂端末秃,所以這個算法才被稱為“冒泡排序”陡叠。
在冒泡排序中玩郊,第 1 輪需要比較 n -1 次,第 2 輪需要比較 n -2 次……第 n -1 輪需
要比較 1 次枉阵。因此译红,總的比較次數(shù)為 (n -1) +(n -2) +…+1 ≈ n^2
/2。這個比較次數(shù)恒定為該數(shù)值兴溜,和輸入數(shù)據(jù)的排列順序無關(guān)侦厚。
不過,交換數(shù)字的次數(shù)和輸入數(shù)據(jù)的排列順序有關(guān)拙徽。假設(shè)出現(xiàn)某種極端情況刨沦,如輸
入數(shù)據(jù)正好以從小到大的順序排列,那么便不需要任何交換操作膘怕;反過來想诅,輸入數(shù)據(jù)要
是以從大到小的順序排列,那么每次比較數(shù)字后便都要進行交換。因此来破,冒泡排序的時
間復(fù)雜度為 O(n^2)篮灼。
一層循環(huán)/右側(cè)開始版
#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;
}
}
左側(cè)開始版
#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";
}
}