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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 魏武 高级黑马   /  2015-8-10 12:58  /  459 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*

//选择排序:(用脚标的方法进行(最优))
//思想:选择排序就是遍历数组,每次遍历都将将比较的最大值拿出来,放在数组中最后打出。
#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;
}
*/


/*
********************
//倒序选择排序:
#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<=i; j++) {
            int t;
            if (arr[j]<arr[i]) {
                t=arr[j];
                arr[j]=arr[i];
                arr[i]=t;
            }
        }
    }
    for (int j=0; j<6; j++) {
        printf("%d ",arr[j]);
    }
    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;
}

*/

















3 个回复

正序浏览
cheenbee 发表于 2015-8-10 21:46
给你补上冒泡排序优化后的代码
//冒泡排序  升序   相邻两数进行比较
void bubbleSort(int arr[],int n){

可以的,兄弟
回复 使用道具 举报
给你补上冒泡排序优化后的代码
//冒泡排序  升序   相邻两数进行比较
void bubbleSort(int arr[],int n){

    for (int i=n-1,exchange=1;i>0&&exchange; i--) {       //控制 趟数exchage
        exchange=0;
        for (int j=0; j<i; j++) {
            if(arr[j]>arr[j+1]){                //依次沉淀最大的数
                int temp=arr[j+1];              //进行值的交换
                arr[j+1]=arr[j];
                arr[j]=temp;
                exchange=1;
            }
        }
    }
}
回复 使用道具 举报
不错,已收藏
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马