因为碰到了一些题目 故此来做总结
一维数组
最常用的冒泡排序:
#include<stdio.h>
void sort(int arr[],int n){
//外层循环
for (int i = 0; i < n-1; ++i) {
int flag=1; //假设flag=1 就是已经排序好的
//内层循环
for (int j = 0; j < n-1-i; ++j) {
//判断升序 赋值
//如果是降序的话 把> 改成<即可
if(arr[j]>arr[j+1]){
int tem=arr[j];
arr[j]=arr[j+1];
arr[j+1]=tem;
//如果进行了元素交换 就说明没有排序好
flag=0;
}
}
if(flag==1){
break;
}
}
}
选择排序:
void SelectSort(int arr[], int n)
{
for (int i = 0; i < n - 1; i++)
{ // 遍历数组角标为0到最大长度减一的数
for (int j = i + 1; j < n; j++)
{ // 遍历角标i后面的数
if (arr[i] > arr[j])
{ // 比较大小,如果前者比后者大则交换两个角标对应的值
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
插入排序:
void InsertSort(int arr[], int n) {
for (int i = 1; i < n; i++) {
int key = arr[i]; // 当前要插入的元素
int j = i - 1;
// 将大于key的元素向后移动
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key; // 插入key到正确位置
}
}
二维数组
只需要记住一种 因为之前死记硬背住了冒泡排序
思想就是 二维数组可以当成一维数组 也应用一维数组的冒泡排序
那就关键是两点:
一.n遍历一维数组的大小是啥 当然就是二维数组连续存储的特性 n就是行号*列号
- 一维数组数= sizeof(array)/sizeof(array[0]);
- 二维数组行数 = sizeof(array)/sizeof(array[0]);
- 二维数组列数 = sizeof(array[0])/sizeof(array[0][0]);
二.那一维数组咋接受二维数组啊 这里就需要用指针来接受 然后通过指针移动来比较访问
#include <stdio.h>
void sort(int *p, int n)
{
// 外层循环
for (int i = 0; i < n - 1; ++i)
{
int flag = 1; // 假设flag=1 就是已经排序好的
// 内层循环
for (int j = 0; j < n - 1 - i; ++j)
{
// 判断升序 赋值
// 如果是降序的话 把> 改成<即可
if (*(p + j) > *(p + j + 1))
{
int *tem = *(p + j);
*(p + j) = *(p + j + 1);
*(p + j + 1) = tem;
// 如果进行了元素交换 就说明没有排序好
flag = 0;
}
}
if (flag == 1)
{
break;
}
}
// for(int i=0;i<n;i++){
// printf("%d ",*(p+i));
// }
}
void main()
{
int arr[2][3] = {30, 10, 76, 4, 22, 17};
int a = sizeof(arr) / sizeof(arr[0]);
int b = sizeof(arr[0]) / sizeof(arr[0][0]);
sort(arr, a * b);
for (int i = 0; i < a; i++)
{
for (int j = 0; j < b; j++)
{
printf("%d ", arr[i][j]);
}
}
}
标签:arr,数组,int,++,flag,一维,78
From: https://www.cnblogs.com/gaodiyuanjin/p/18621923