冒泡排序
#include <iostream>
using namespace std;
// 冒泡排序
void bubbleSort(int arr[], int len);
void printArray(int array[], int len);
int main (){
int arr[] = {888, 777, 6666, 555, 444, 333, 222, 111};
cout<< "排序前" <<endl;
printArray(arr, 8);
cout<< "排序后" <<endl;
bubbleSort(arr, 8);
printArray(arr, 8);
return 0;
}
void bubbleSort(int arr[], int len){
int count = 0 ;
for (int i = 0; i < len - 1; i++) {
for (int j = len-1; j - 1 >= i ; j--) {
count++;
if (arr[j-1] > arr[j]){
int temp = arr[j-1];
arr[j-1] = arr[j];
arr[j] = temp;
}
}
}
cout<< count <<endl;
}
void printArray(int array[], int len){
cout<<"[";
for (int i = 0; i < len; i++) {
if (i == len-1)
cout<< array[i] <<"]"<<endl;
else
cout<<array[i] << ", ";
}
}
选择排序
#include <iostream>
using namespace std;
// 冒泡排序
void selectionSort(int arr[], int len);
void printArray(int array[], int len);
int main (){
int arr[] = {888, 777, 6666, 555, 444, 333, 222, 111};
cout<< "selectionSort排序前" <<endl;
printArray(arr, 8);
cout<< "selectionSort排序后" <<endl;
selectionSort(arr, 8);
printArray(arr, 8);
return 0;
}
void selectionSort(int arr[], int len){
for (int i = 0; i < len - 1; i++) {
int minIndex = i;
for (int j = i; j < len; j++) {
if (arr[j] < arr[minIndex])
minIndex = j;
}
// 交换
if (minIndex != i){
int temp = arr[minIndex];
arr[minIndex] = arr[i];
arr[i] = temp;
}
}
}
void printArray(int array[], int len){
cout<<"[";
for (int i = 0; i < len; i++) {
if (i == len-1)
cout<< array[i] <<"]"<<endl;
else
cout<<array[i] << ", ";
}
}
插入排序
每次处理一张牌, 把这张牌插入到前面已经排好序的牌中
插入排序是一种从序列左端开始依次对数据进行排序的算法。在排序过程中,左侧的数据陆续归位,而右侧留下的就是还未被排序的数据。插人排序的思路就是从右侧的未排序区域内取出一个数据,然后将它插人到已排序区域内合适的位置上。
#include <iostream>
using namespace std;
// 冒泡排序
void insertionSort(int arr[], int len);
void printArray(int array[], int len);
int main (){
int arr[] = {5, 9, 3, 1, 2, 8, 4, 7, 6};
cout<< "insertionSort排序前" <<endl;
printArray(arr, 8);
cout<< "insertionSort排序后" <<endl;
insertionSort(arr, 8);
printArray(arr, 8);
return 0;
}
void insertionSort(int arr[], int len){
// 写法1
// for (int i = 1; i < len; i++) {
// // 将 i 位置的值 插入到合适的位置
// for (int j = i; j > 0; j--) {
// if (arr[j] < arr[j-1]){
// int temp = arr[j];
// arr[j] = arr[j-1];
// arr[j-1] = temp;
// } else{
// break; //此时就是合适的插入位置
// }
// }
// }
// 写法2
for (int i = 1; i < len; i++) {
// 将 i 位置的值 插入到合适的位置
for (int j = i; j > 0 && arr[j] < arr[j-1]; j--) {
int temp = arr[j];
arr[j] = arr[j-1];
arr[j-1] = temp;
}
}
}
void printArray(int array[], int len){
cout<<"[";
for (int i = 0; i < len; i++) {
if (i == len-1)
cout<< array[i] <<"]"<<endl;
else
cout<<array[i] << ", ";
}
}
二维数组的dot
#include <iostream>
#define M 4
#define K 3
#define N 5
using namespace std;
int main (){
int a[M][K]={{1, 3, 5}, {2, 4, 6}, {15, 7, 4}, {-2, 8, 9}};
int b[K][N]={{3, 6, 2, 1, 7}, {9, 1, 3, -1, 5}, {2, 5, 8, 1, 9}};
int c[M][N];
cout<< "Matrix A = " <<endl;
for (int i = 0; i < M; i++) {
for (int j = 0; j < K; j++) {
cout<< a[i][j] << "\t";
}
cout <<endl;
}
cout<< "Matrix B = " <<endl;
for (int i = 0; i < K; i++) {
for (int j = 0; j < N; j++) {
cout<< b[i][j] << "\t";
}
cout <<endl;
}
// 初始化数组c
cout<< "Matrix C = " <<endl;
for (int i = 0; i < M; i++) {
for (int j = 0; j < N; j++) {
c[i][j] = 0;
cout<< c[i][j] << "\t";
}
cout <<endl;
}
// dot 计算
for (int i = 0; i < M; i++) {
for (int j = 0; j < N; j++) {
// 这里每次行和列是固定的,
// 对于a来说要从0开始编号列索引
// 对于b来说要从0开始编号行索引
for (int k = 0; k < K; k++) {
c[i][j] += a[i][k]*b[k][j];
}
}
}
// 显示输出
cout<< "结果 Matrix C = " <<endl;
for (int i = 0; i < M; i++) {
for (int j = 0; j < N; j++) {
cout<< c[i][j] << "\t";
}
cout <<endl;
}
return 0;
}
思考
#include <iostream>
#define M 4
#define N 3
using namespace std;
int main (){
int a[M][N]={{1, 3, 5}, {2, 4, 6}, {15, 7, 4}, {2, 8, 9}};
cout<< "Matrix A = " <<endl;
for (int i = 0; i < M; i++) {
for (int j = 0; j < N; j++) {
cout<< a[i][j] << "\t";
}
cout <<endl;
}
// a 的转置 行变列 列变行
return 0;
}