A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李国峰 中级黑马   /  2015-9-1 22:00  /  1149 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天学了数组  其中重点就是排序   但是听的懵懵懂懂的    求大神指导  最近黑马币太少了  去不了技术区求助了    最好简单易懂  有代码最好 (要是能标记注释那就更好了)白话文谢谢!!

6 个回复

倒序浏览
  1. void maoPao(int len,int arr[]){

  2. //下边这个外层循环控制内层循环的次数(因为j是从0到len-i-1)   
  3. for (int i = 0; i < len-1; i++) {
  4. //内层循环是用来比较相邻两个元素(是arr[j]和arr[j+1])的大小
  5.         for (int j = 0; j < len-i-1; j++) {
  6.             if (arr[j] < arr[j+1]) {
  7. //这个是交换两个元素
  8.                 int temp= arr[j];
  9.                 arr[j] = arr[j+1];
  10.                 arr[j+1] = temp;
  11.             }
  12.         }
  13.     }
  14. }
复制代码

如果还有问题,加我QQ私聊:451481634!:
回复 使用道具 举报
刚发完。。。。。。。。。。。。。
回复 使用道具 举报
{:2_31:}。。。。。。。。
回复 使用道具 举报
我来看答案的~~~
回复 使用道具 举报
/*

//选择排序:《第一种方法》(用脚标的方法进行(最优))
//思想:选择排序就是遍历数组,每次遍历都将将比较的最大值拿出来,放在数组中最后打出。
#include<stdio.h>
int main(){
    int a[6]={1,2,4,3,8,5};
    int c ,temp;//这里的c用来表示最大值的时候的角标是多少
    for (int i=0; i<5; i++) {
             c=i;
        for (int j=i+1; j<6; j++) {
            if (a[c]<a[j]) {//这里相当于让里层从第i+1个数开始跟第i个数比较
               c=j;//引入c就是为了不能改变外层的i的同时交换角标
            }
        }
            temp=a[i];
            a[i]=a[c];//刚才的c=j,所以这里的a[c]等于刚才的最大值 a[?]max
            a[c]=temp;
            
        //里层循环的完成一次,a[第一个数]就==a[]最大值
    }//每次外层循环完成对里层循环的范围控制
    for (int i=0; i<6; i++) {
            printf("%d ",a[i]);
        }
    printf("\n");
    return 0;
}

*/


/*
//选择排序:《第二种方法》使用临时变量存储最大值
#include<stdio.h>
int main(){
int a[6]={5,2,4,6,1,0};
int t;
    for (int i=0; i<6; i++) {
        for (int j=0; j<6; j++) {
            if (a[j]>a[i]) {
                t=a[i];
                a[i]=a[j];
                a[j]=t;

                }

            }

        }
for (int i=5; i>=0; i--) {
    printf("%d ",a[i]);
  }
    printf("\n");
    return 0;
}
*/
*********************************下面是冒泡排序************************************************
//冒泡排序:
/*
*   思想:对数组进行排序。让相邻的两个数进行比较,若后一个数小于前一个数,则交换这两个数的值
*      第一遍:让arr[0]和arr[1]比较、arr[1]和arr[2]比较、让arr[2]和arr[3]比较、...arr[n-1]和arr[n],若后一个数小于前一个数,则这交换两个数的值
第二遍:让arr[0]和arr[1]比较、arr[1]和arr[2]比较、让arr[2]和arr[3]比较、...arr[n-2]和arr[n-1],若后一个数小于前一个数,则这交换两个数的值
第三遍:让arr[0]和arr[1]比较、arr[1]和arr[2]比较、让arr[2]和arr[3]比较、...arr[n-3]和arr[n-2],若后一个数小于前一个数,则这交换两个数的值
.
.
.
最后一遍:让arr[0]和arr[1]比较,若arr[1]小于arr[0],则交换这两个数的值
*  @param arr  接收数组
*  @param size 接收数组长度
*
*/
/*

#include<stdio.h>
int main(){
    //    对数组排序
     int arr[]={1,2,4,3,8,5};
    for (int i = 0; i <6; i++) {
        for (int j=0;j<6-i-1;j++) {
            if (arr[j] < arr[j+1]) {
                arr[j] = arr[j]^arr[j+1];//当初装逼用的位运算交换数值,你看的出是交换数值就行
                arr[j+1] = arr[j]^arr[j+1];
                arr[j] = arr[j]^arr[j+1];
            }
        }
    }
    //    遍历排序后的数组
    for (int i=0; i<6; i++) {
        printf("%d ",arr[i]);
}
printf("\n");
return 0;
}
*/
回复 使用道具 举报
  1. //
  2. //  main.c
  3. //  选择排序

  4. #include <stdio.h>

  5. int main(int argc, const char * argv[]) {
  6.     // 已知一个无序的数组, 里面有5个元素, 要求对数组进行排序
  7.     int nums[8] = {99, 12, 88, 34, 5, 44, 12, 100};
  8.    
  9.     /*
  10.     int a = 10;
  11.     int b = 12;
  12.     int c = 5;
  13.    
  14.     printf("%i, %i, %i\n", a, b, c);
  15.     if (a > b) {
  16.         int temp = a;
  17.         a = b;
  18.         b = temp;
  19.     }
  20.    
  21.     if (a > c)
  22.     {
  23.         int temp = a;
  24.         a = c;
  25.         c = temp;
  26.     }
  27.    
  28.     if (b > c) {
  29.         int temp = b;
  30.         b = c;
  31.         c = temp;
  32.     }
  33.    
  34.     printf("%i, %i, %i\n", a, b, c);
  35.      */
  36.     int length = sizeof(nums) / sizeof(nums[0]);
  37.     printf("length = %i\n", length);
  38.     for (int i = 0; i < length; i++) {
  39.         printf("nums[%i] = %i\n", i, nums[i]);
  40.     }
  41.    
  42.     // length - 1是为了防止角标越界
  43.     // length - 1因为最后一个元素已经没有可以比较的了
  44.     // 0, 1, 2, 3, 4
  45.     for (int i = 0; i < length - 1; i++) {
  46.         for (int j = i+1; j < length; j++) {
  47. //            printf("*");
  48. //            printf("i = %i, j = %i\n", i, j);
  49.             if (nums[i] > nums[j]) {
  50.                 int temp = nums[i];
  51.                 nums[i] = nums[j];
  52.                 nums[j] = temp;
  53.             }
  54.         }
  55. //        printf("\n");
  56.     }
  57.    
  58.     printf("--------------\n");
  59.     for (int i = 0; i < length; i++) {
  60.         printf("nums[%i] = %i\n", i, nums[i]);
  61.     }
  62.    
  63.     return 0;
  64. }

  65. //冒泡

  66. #include <stdio.h>

  67. void selectSort(int nums[], int length);
  68. void printArray(int nums[], int length);
  69. //void swap(int v1, int v2);
  70. void swap(int nums[], int i, int j);
  71. void bubbleSort(int nums[], int length);

  72. int main(int argc, const char * argv[])
  73. {
  74.     // 已知一个无序的数组, 里面有5个元素, 要求对数组进行排序
  75.     int nums[8] = {99, 12, 88, 34, 5, 44, 12, 100};
  76.     int length = sizeof(nums) / sizeof(nums[0]);
  77.    
  78.     printArray(nums, length);
  79. //    selectSort(nums, length);
  80.     bubbleSort(nums, length);
  81.    
  82.     printf("----------------\n");
  83.     printArray(nums, length);

  84.     return 0;
  85. }

  86. // 遍历数组
  87. void printArray(int nums[], int length)
  88. {
  89.     for (int i = 0; i < length; i++) {
  90.         printf("nums[%i] = %i\n", i, nums[i]);
  91.     }
  92. }

  93. void bubbleSort(int nums[], int length)
  94. {
  95.     for (int i = 0; i < length - 1; i++) {
  96.         for (int j = 0; j < length - 1 - i; j++) {
  97.             if (nums[j] > nums[j + 1]) {
  98.                 swap(nums, j, j+1);
  99.             }
  100.         }
  101.     }
  102. }

  103. // 选择排序
  104. void selectSort(int nums[], int length)
  105. {
  106.     for (int i = 0; i < length - 1; i++) {
  107.         for (int j = i+1; j < length; j++) {
  108.             if (nums[i] > nums[j]) {
  109.                 /*
  110.                 int temp = nums[i];
  111.                 nums[i] = nums[j];
  112.                 nums[j] = temp;
  113.                  */
  114. //                swap(nums[i], nums[j]);
  115.                 swap(nums, i, j);
  116.             }
  117.         }
  118.     }

  119. }

  120. // 基本数据类型作为函数的参数, 是值传递, 在函数中修改形参不会影响实参的值
  121. /*
  122. void swap(int v1, int v2)
  123. {
  124.     int temp = v1;
  125.     v1 = v2;
  126.     v2 = temp;
  127. }
  128. */
  129. // 交换两个数的值
  130. void swap(int nums[], int i, int j)
  131. {
  132.     int temp = nums[i];
  133.     nums[i] = nums[j];
  134.     nums[j] = temp;
  135. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马