• 简单快速排序


    最近,开始认真学习算法,为了更好的督促自己学习,也请大家帮忙监督,所以列了出来,欢迎批评指正。

    第一个是选择排序

    选择排序的基本思想是:设有N个元素要排序,首先选择最大的元素与第一个元素交换,然后再对剩余的N-1个元素进行类似处理,这样重复N-1次后,即可将N个元素按由大到小的顺序排列。若由小到大排序,只需每次选择最小元素。
    具体代码如下:

     1 #include "Stdio.h"
     2 #define N 3
     3  void main(void)
     4 {
     5 int temp,i,j;
     6 int arr[N];
     7 for(i=0;i<N;i++)      /* 从键盘上输入3个数 */ 
     8 scanf("%d",&arr[i]);
     9 for(j=0;j<N-1;j++)    /* 3个元素选择2遍 */
    10   {
    11   for(i=j+1;i<N;i++)  /* 没遍进行3-(i+1)次 */
    12   {
    13     if(arr[i]>arr[j])    /* 把arr[j]当做最大数进行比较 */
    14     temp=arr[i];
    15     arr[i]=arr[j];
    16     arr[j]=temp;
    17   }
    18   }
    19   for(i=0;i<N;i++)
    20 {
    21   printf("%8d
    ",arr[i]); 
    22 }   
    23 scanf("%d",&temp);
    24 }

    算法改进:事实上,执行元素的交换并不都是必须的,只要记住比较时大元素的位置,即序号即可,在内循环结束后做一次交换即可,从而提高程序的执行效率。

    代码如下:

    1 #include "Stdio.h"
     2 #define N 3
     3  void main(void)
     4 {
     5 int temp,i,j,k;
     6 int arr[N];
     7 for(i=0;i<N;i++)      /* 从键盘上输入3个数 */ 
     8 scanf("%d",&arr[i]);
     9 for(j=0;j<N-1;j++)    /* 3个元素选择2遍 */
    10   {k=i;
    11   for(i=j+1;i<N;i++)  
    12   { if(a[k]<a[j]) k=j;/* 记住新大元素的序号 */
    13     if(k!=i)   
    14    { temp=arr[i];
    15     arr[i]=arr[j];
    16     arr[j]=temp;}
    17   }
    18   }
    19   for(i=0;i<N;i++)
    20 {
    21   printf("%d
    ",arr[i]); 
    22 }   
    23 scanf("%d",&temp);
    24 }
  • 相关阅读:
    [985] 令牌放置
    [191] 位1的个数
    [637] 二叉树的层平均值
    大数据量时 Mysql LIMIT如何正确对其进行优化(转载)
    数据库中,表一sum得出一个值,赋给表二的某个字段,为null
    安装JDK提示: 该项不适于在指定状态下使用的错误
    hibernate中多对一问题
    JSONObject基本内容(三)
    JSONObject基本内容(二)
    JSONObject基本内容(一)
  • 原文地址:https://www.cnblogs.com/hzko5114/p/3496032.html
Copyright © 2020-2023  润新知