c语言》排序法

排序法

1.选择排序法

思路:在自定义函数中定义两个局部变量i,j;

i<数组长度;

j=i+1 j<数组长度;

if(array[i]<array[j]){//if(array[i]<array[j])可省略

int t,

t=array[i];

array[i]=array[j];}

主函数输出:printf("%d",array[i]);

//代码:从小到大排序     if (array[i]>array[j])

从大到大排序     if (array[j]>array[i])

#include <stdio.h>

int main(int argc, const char * argv[]) {
    int array[]={1,2,4,6,3,5,0,8,9};//没确定数组长度array[]可用sizeof求出
    int i,j,temp;
    int z=sizeof(array)/sizeof(int);
    for (i=0; i<z; i++) {
        for (j=i+1; j<z; j++) {
            if (array[i]>array[j]) {
                temp=array[i];
                array[i]=array[j];
                array[j]=temp;

            }
        }
        printf("%d",array[i]);
    }
    printf("\n");
    return 0;
}

 

2.冒泡排序法

思路:

若数组array元素长度为固定值n,可特设array[n+1]

在条件取下标值为1且小于n+1

for循环

          

    for (i=1; i<n-1; i++) 

 

    for (j=1; j<n+1-i; j++) 

 

    if (array[j]>array[j+1]) 

                t=array[j];

                array[j]=array[j+1]

                array[j+1]=t; 

#include <stdio.h>

int main(int argc, const char * argv[]) {
    int array[11];
    int i,j,t;
    printf("请输入数值:");
    for (i=1; i<11; i++) {
        scanf("%d",&array[i]);
    }
    for (i=1; i<10; i++) {
        for (j=1; j<11-i; j++) {
            if (array[j]>array[j+1]) {
                t=array[j];
                array[j]=array[j+1];
                array[j+1]=t;
            }
        }
    }
    printf("排序后:");
    for (i=1; i<11; i++) {
        printf("%d",array[i]);
    }
    printf("\n");
    return 0;
}

思路:

若数组array元素长度为固定值n,可特设array[n]

在条件取下标值为0且小于n

for循环

          

    for (i=0; i<n-1; i++) 

 

    for (j=0; j<n-1-i; j++) 

 

    if (array[j]>array[j+1]) 

                t=array[j];

                array[j]=array[j+1]

                array[j+1]=t; 

方法二
#include <stdio.h>

int main(int argc, const char * argv[]) {
    int array[10];
    int i,j,t;
    printf("请输入数值:");
    for (i=0; i<10; i++) {
        scanf("%d",&array[i]);
    }
    for (i=0; i<10-1; i++) {
    for (j=0; j<10-1-i; j++) {
    if (array[j]>array[j+1]) {
                t=array[j];
                array[j]=array[j+1];
                array[j+1]=t;
            }
        }
    }
    printf("排序后:");
    for (i=0; i<10; i++) {
        printf("%d",array[i]);
    }
    printf("\n");
    return 0;
}

3.希尔排序

#include <stdio.h>
#include "string.h"
void text(int array[],int n1);
int main(int argc, const char * argv[]) {
    int array[]={9,2,6,4,5,8,0,7,3,1};
    int n1;
    n1=sizeof(array)/sizeof(int);
    printf("请输入排序前的数据:");
    for (int i=0; i<n1; i++) {
        printf("%d",array[i]);
    }
    printf("\n");
    printf("排序后的数据:");
    for (int i=0; i<n1; i++) {
        text(array,n1);
        printf("%d",array[i]);
    }
    printf("\n");
    return 0;
}

void text(int array[],int n1){
    int i,j,x;
    int d=n1/2;
    while (d>=1)
    {
        for (i=d; i<=n1; i++)
        {
            x=array[i];//记录i i++数值
            j=i-d;//j是数组下标i对应数组下标值

        while (j>=0&&array[j]>x)
        {
            array[j+d]=array[j];
            j=j-d;
        }
            array[j+d]=x;//array[j]>x不成立就替换值
        }
        d/=2;

    }
}
时间: 2024-10-11 07:03:17

c语言》排序法的相关文章

C语言排序算法之简单交换法排序,直接选择排序,冒泡排序

C语言排序算法之简单交换法排序,直接选择排序,冒泡排序,最近考试要用到,网上也有很多例子,我觉得还是自己写的看得懂一些. 简单交换法排序 1 /*简单交换法排序 2 根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置 3 交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动 4 不稳定 5 */ 6 #include<windows.h> 7 #include<stdio.h> 8 void main(){ 9 int i,j,arr[10

基于python语言的经典排序法(冒泡法和选择排序法)

前 每逢周末就遇雨期,闲暇之余,捣鼓了下python,心心念想学习,今天就在电脑上装了个2.7,学习了下经典算法,冒泡与选择排序法 第一次写关于python的文章,说的不当之处,多多指正,我积极改正 在之前,曾写过使用java和C语言实现该两种排序法,详情见https://www.cnblogs.com/hong-fithing/p/7615907.html 搭建环境,准备工作就不冗余介绍了,网上搜罗一大堆 目录 冒泡排序法 选择排序法 冒泡排序法 冒泡类似于汽水现象,摇动一下,就有很多泡往上冒

C语言实现冒泡排序法和选择排序法代码参考

为了易用,我编写排序函数,这和直接在主调函数中用是差不多的. 我认为选择排序法更好理解!请注意 i 和 j ,在写代码时别弄错了,不然很难找到错误! 冒泡排序法: void sort(int * ar,int k) //ar指向数组名,k是元素个数 { int i,j,temp; for(i = 0; i < k - 1; i++){ //比较k-1趟就可以了 for(j = 0; j < k - i -1; j++){ if(ar[j] > ar[j + 1]){ temp = ar[

C语言 数组输出,冒泡排序法,沉底排序法,二维数组输出,输出字母列长度,从随机数组中找重复数

#include <stdio.h> #define sum 3+4//宏定义是原封不动的使用used for test4 #include <time.h>//used for test8~9 #include <stdlib.h>//used for test8~9 void test(){//数组输出 //int a[5]={1,2,3,4,5}; printf("array output,look,please...\n"); int a[1

常用排序法之一 ——冒泡排序法和选择排序法

语言中,常用的算法有:冒泡排序.快速排序.插入排序.选择排序.希尔排序.堆排序以及归并排序等等.那么从这篇开始,我将分别总结下这几种排序法. 先交代一下,我们将要排序的数组定义为arr[N],即数组arr[]包含N个元素. ## 冒泡排序法(Bubblesort) ## 所谓排序法,就是对一组无序的序列进行有序的排序(从大到小或者从小到大),那么什么叫冒泡排序法,冒泡排序法又是怎么实现数组的有序排列呢. 冒泡排序法的具体实现方法是这样的,从数组的第一个元素`arr[0]`开始,两两比较**(`a

C语言排序算法总结

学计算机程序设计的应该都知道,算法是程序之魂.所谓算法,就是解决问题的方法加上有限的实现步骤.算法的特点有有穷性,确定性,有效性,有零个或多个输入,有一个或多个输出.下面我们就来简单总结一下C语言中的三种经典排序算法. 一.冒泡算法. 所谓冒泡排序法,就是对一组数字进行从大到小或从小到大排序的一种算法.具体方法是,相邻的数字两两交换.从第一个数值开始,如果相邻两个数的排列顺序与我们的期望不相同,则将两个数的位置进行交换(对调):如果其余我们期望的相同,则不交换位置.重复这样的过程,一直到最后没有

C语言排序算法复习

排序算法有很多种,这里在复习和分析的基础上,做一个自己的总结: 首先要知道有哪些排序算法,google一下,有云C语言7大经典排序算法(也有8大).主要包括冒泡排序,快速排序,选择排序,插入排序,希尔排序,归并排序,堆排序,8大的还有基数排序.各有各的版本,代码写法也各不相同.所以这里以整理思路为先,代码只是作为自己的一个备份. 搞清楚的概念:稳定排序和不稳定排序,就看序列中两个值相等的数,排完序之后的相对位置是否改变,如果改变了就不稳定. 内部排序和外部排序,只用到内存即可完成排序的就叫内部排

【JAVA】算法排序(一)——选择排序法

一.前言 前文中我们总览了一下所有的排序的算法,下面小编就和给大家分享一下选择排序算法. 二 .核心知识点 选择排序的核心思想是我是最大的. 选择排序(Selection sort)是一种简单直观的排序算法.无论是那一种语言的教科书,都会运用到选择排序算法来比较大小.虽然代码就几行,但是如何理解其中的思想是很重要的.下面是小编自己的一些认识: 工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完. eg:比如从大到小,先随便取一个值

C语言排序

以下是C语言的排序法,一些例子 1.冒泡法: #include "stdafx.h" #include"stdio.h" #include"stdlib.h" //冒泡法练习 int _tmain(int argc, _TCHAR* argv[]) { int b[1000]; int a,c,d,t; printf("请输入数字个数\n"); scanf("%d",&a);//输入数字个数 pri