C++ 排序的理解 (选择排序,插入排序)
#include<stdio.h> #include <iostream> using namespace std;
//选择排序的理解:每次循环n-1次,每一次找出一个最大或者最小的值并记录,当每次循环结束时,将找到的值放在末尾或者首部,然后继续循环 void swap(int *a, int *b) //元素交换 { int temp = 0; temp = *a; *a = *b; *b = temp; } int main() { int a[4] = { 23, 20, 13, 22}; //定义一个int类型数组 //选择排序 for (int i = 0; i <4; i++) { int min1 = i; //定义一个变量赋值为i,表示当前循环中最小的值的下标,表示最小值在数组中所对应的的位置下标 for (int j = i + 1; j < 4; j++) //定义一个for循环,j的初始值为当前循环的第二个元素 { if (a[j] < a[min1])//每一次循环,拿当前循环中第二个元素与后面的元素进行对比,如果发现比后面的元素小,则记录当前较小元素所在的数组下标,并赋值给min1 { min1 = j; } } if (min1 != i) //当循环结束发现min的值并不是最后一个值时,则将当前循环中最小的值,与当前循环中的第一个元素的值进行交换。如果 //如果当前的min1存储的值是最后一次循环的值,并且未发生改变,则表示该数值已经是最大,则表示排序已经完成,直接跳出循环 { swap(&a[min1], &a[i]); } } return 0; }
插入排序
#include<stdio.h> #include <stdlib.h> #include <time.h> int* insert(int * p) { int i; int j; int temp; //定义一个基准值 for (i = 1; i < 10; i++) { temp = p[i]; // j = i - 1; while (j >= 0 && p[j]>temp) //如果当前值大于0 并且基准值小于当前的值,则将元素像后挪 { p[j + 1] = p[j]; j--; } p[j + 1] = temp; } for (int i = 0; i < 10; i++) { printf("%d ",p[i]) ; } return p; } int main() { int arr[10] = { 0 }; srand((unsigned)time(NULL)); for (int i = 0; i < 10; i++) { arr[i] = rand() % 10; } int* arr1=insert(arr); return 0; }