随机生成数组排序的三种方法

简介: 随机生成数组排序的三种方法

随机生成数组排序的三种方法

数组元素排列例题中 (整体代码在后面,前面是思路,编译环境 VS2013)

看到例题,我们要生成10w组数据并开始排序,我直接分为两步:

第一步就是生成随机数

第二步就是开始排列

我们开始吧!

用到的系统函数:

下面展示一些

#include <stdio.h>
#include <stdlib.h>
#include <time.h>//调用时间函数,用来生成随机值

为了体现函数思想,自定义一些函数来辅助编译:

void suiji(int a[],int n);//用于调用生成随机数
void twy1(int a[], int n);//第一种排序方法
void twy2(int a[], int n);//第二种排序方法
void twy3(int a[], int n);//第三种排序方法

这是我的函数主体:

int main()
{
  int a[100000]= { 0 };
  printf("现在为您打印10万组数据\n");
  suiji(a, 100000);
  printf("排序结果如下:\n");
  //twy1 (a, 100000);
  //twy2 (a, 100000);
  twy3(a, 100000);
  return 0;
}

随机函数的实现:

void suiji(int a[], int n)
通过srand(time(NULL));//初始化随机参数  
这里利用的是time函数的随机值,然后再用rand()来随机赋值给a[]。
具体代码:
void suiji(int a[], int n)
{
  int i = 0;
  srand(time(NULL));//初始化随机参数
    for(i; i < n;i++)
  {
    a[i] = rand()%10000;//保证生成数据在10000以内;
    printf("%d\n",a[i]);
  }
}

第一种排序:

选择排序法

简单的来说就是从最后一个开始一个个和前面比较,把较大的数字放在后面面,一次次的重复,就这样就直接排出来了,我认为和冒泡法思路基本是一样的,只不过,这个选择排序法

是从后面开始排序的,排的是最大值。

具体代码实现:

void twy1(int a[], int n)
{
  int i= 0, j= 0, tmp = 0,k=0;
  for (i = n - 1; i >= 1; i--)
  {
    for (j=0; j <= i - 1; j++)
    {
      
      if (a[j] > a[j+1])
      {
        tmp = a[j];
        a[j] = a[j+1];
        a[j+1] = tmp;
      }
    }
  }
  for (k; k < n; k++)
    printf("%-5d", a[k]);
}

第二种排序:

冒泡排序法

依次比较相邻两个数的大小,将较大的数放到后面,然后依次循环到最后一个数,那么这最后一个数就是这一列数中最大的一个,然后在用相同的办法比较剩余的数,每次都可以比较出最大的一个数,直到排到最后一个数为止。就是选择排序法的逆用。

具体代码实现:

void twy2(int a[], int n)
{
  int i = 0, j = 0, tmp = 0, k = 0;
  for (i; i < n; i++)
  {
    for (j=1; j < n-i ; j++)
    {
      if (a[j]<a[j-1])
      {
        tmp = a[j-1];
        a[j-1] = a[j];
        a[j] = tmp;
      }
    }
  }
  for (k; k < n; k++)
    printf("%-5d", a[k]);
}

第三种排序:

直接插入法

这种方法的话,就是不断的提高数组个数,在和前面的比较,找到自己合适的位置,来进行插入,应为你的数组个数是由2,3,4,5,6…一个个提升上来的,所以前面的循序就一定是正确的,就这样。

具体代码实现:

void twy3(int a[], int n)
{
  int i = 0, j = 0, tmp = 0, k = 0;
  for (i = 1; i < n; i++)
  {
    if (a[i] < a[i - 1])
    {
      tmp = a[i];
      for (j = i - 1; j >= 0 && a[j]>tmp;j--)
        a[j + 1] = a[j];
      a[j + 1] = tmp;
    }
    
  }
  for (k; k < n; k++)
    printf("%-5d", a[k]);
}

完整代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>//调用时间函数,用来生成随机值
void suiji(int a[],int n);//用于调用生成随机数
void twy1(int a[], int n);//第一种排序方法
void twy2(int a[], int n);//第二种排序方法
void twy3(int a[], int n);//第三种排序方法
int main()
{
  int a[100000]= { 0 };
  printf("现在为您打印10万组数据\n");
  suiji(a, 100000);
  printf("排序结果如下:\n");
  //twy1 (a, 100000);
  //twy2 (a, 100000);
  twy3(a, 100000);
  return 0;
}
void suiji(int a[], int n)
{
  int i = 0;
  srand(time(NULL));//初始化随机参数
    for(i; i < n;i++)
  {
    a[i] = rand()%10000;//保证生成数据在10000以内;
    printf("%d\n",a[i]);
  }
}
//第一种排序方法 *****选择排序法*****
void twy1(int a[], int n)
{
  int i= 0, j= 0, tmp = 0,k=0;
  for (i = n - 1; i >= 1; i--)
  {
    for (j=0; j <= i - 1; j++)
    {
      
      if (a[j] > a[j+1])
      {
        tmp = a[j];
        a[j] = a[j+1];
        a[j+1] = tmp;
      }
    }
  }
  for (k; k < n; k++)
    printf("%-5d", a[k]);
}
//第二种排序方法*****冒泡排序法*****
void twy2(int a[], int n)
{
  int i = 0, j = 0, tmp = 0, k = 0;
  for (i; i < n; i++)
  {
    for (j=1; j < n-i ; j++)
    {
      if (a[j]<a[j-1])
      {
        tmp = a[j-1];
        a[j-1] = a[j];
        a[j] = tmp;
      }
    }
  }
  for (k; k < n; k++)
    printf("%-5d", a[k]);
}
//第三种排序方法*****直接插入法*****
void twy3(int a[], int n)
{
  int i = 0, j = 0, tmp = 0, k = 0;
  for (i = 1; i < n; i++)
  {
    if (a[i] < a[i - 1])
    {
      tmp = a[i];
      for (j = i - 1; j >= 0 && a[j]>tmp;j--)
        a[j + 1] = a[j];
      a[j + 1] = tmp;
    }
    
  }
  for (k; k < n; k++)
    printf("%-5d", a[k]);
}


相关文章
|
5月前
|
算法
快速打乱一个数组排序的方式有哪些?
快速打乱一个数组排序的方式有哪些?
64 0
|
算法
arr = [1,2,5,8,9,10,20,30,40] 有一个从小到大排序好的数组,现在输入一个数,要求按照原来的规律插入到数组中
arr = [1,2,5,8,9,10,20,30,40] 有一个从小到大排序好的数组,现在输入一个数,要求按照原来的规律插入到数组中
104 0
|
1天前
|
C++
数组元素移除(暴力求解)
一种原地移除数组中特定值元素的暴力求解方法,并通过C++代码示例展示了如何实现这一操作。
9 0
|
5月前
最短代码实现随机打乱数组各个元素的顺序
最短代码实现随机打乱数组各个元素的顺序
|
5月前
|
存储 Python
处理随机元素来创建数列是一个涉及随机数生成和数列构造的过程
处理随机元素来创建数列是一个涉及随机数生成和数列构造的过程
45 0
|
算法
使用遍历方法和分治法求两个数组的值
看似简单的姐数组中的最大值实际上体现了不同的思路本文将以比较数组大小为背景,分别展示普通算法和分治法,通过对比来简述分治法。 问题描述 给定一个整数数组,编写一个算法来找到数组中的最大值和最小值。
70 0
|
算法 JavaScript
洗牌算法实现随机排序
洗牌算法实现随机排序。
140 0
|
算法
算法练习——(8)用下标排序
问题:给你n个无序的int整型数组arr,并且这些整数的取值范围都在0-20之间,要你在 O(n) 的时间复杂度中把这 n 个数按照从小到大的顺序打印出来。
|
存储 机器学习/深度学习 算法
519. 随机翻转矩阵 :「双指针」&「哈希 swap」
519. 随机翻转矩阵 :「双指针」&「哈希 swap」