博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C之算法
阅读量:6633 次
发布时间:2019-06-25

本文共 4532 字,大约阅读时间需要 15 分钟。

   1° 选择排序算法

   核心思路如下图:

   以字符串排序进行说明

#include 
#include
#define SIZE 81#define LIM 20#define HALT " "void stsrt(char *strings[], int num);int main(void){ char input[LIM][SIZE]; char *ptstr[LIM]; int ct = 0; int k; printf("Input up %d lines, and I will sort them.\n", LIM); printf("To stop, press the Enter key at a line's start.\n"); while(ct < LIM && gets(input[ct]) != NULL && input[ct][0] != '\0') { ptstr[ct] = input[ct]; ct++; } stsrt(ptstr, ct); puts("\nHere's the sorted list: \n"); for(k = 0; k < ct; k++) puts(ptstr[k]); return 0;}void stsrt(char *strings[], int num){ char *temp; int top, seek; for(top = 0; top < num - 1; top++) for(seek = top + 1; seek < num; seek++) if(strcmp(strings[top], strings[seek]) > 0) { temp = strings[top]; strings[top] = strings[seek]; strings[seek] = temp; }}
View Code

   以int数组排序进行说明(以C语言为例)

#include 
void sort(int a[], int len);int main(void){ int number[] = {
2, 4, 7, 11, 789, 16, 89, 24, 27, 32, 36, 40, 46}; int len = sizeof(number) / sizeof(number[0]); sort(number, len); for(int i = 0; i
a[j]) // 小——>大 若a[i] < a[j]; 大——>小 { temp = a[i]; a[i] = a[j]; a[j] = temp; } }}
View Code

   (以JAVA语言为例)

public class ArrayDemo {    public static void main(String[] args) {       int age[] = {31, 30, 18, 17, 8, 9, 1, 39};       sort(age);       print(age);    }        public static void print(int temp[]) {        for(int i = 0; i < temp.length; i++)            System.out.print(temp[i] + " ");    }        public static void sort(int temp[]) {        for(int i = 0, t = 0; i < temp.length - 1; i++)            for(int j = i + 1; j < temp.length; j++)                if(temp[j] < temp[i]) {                    t = temp[j];                    temp[j] = temp[i];                    temp[i] = t;                }    }}
View Code

   核心思想:(查找和放置)选择剩余最大值的一个办法就是比较剩余数组的第一和第二个元素。如果第二个元素大,就交换这两个数据。想在比较第一个和第三个元素。如果第三个大,就交换这两个数据。每一次交换都把大的元素移到上面。继续这种方法,直到比较第一个和最后一个元素。完成以后,最大的数就在剩余数组的第一个元素中。此时第一个元素已经排好了序,但是数组中的其他元素还很混乱。

   2° 冒泡排序算法

   核心思路如下图:

 

   (以JAVA语言为例)   

public class OtherDemo {    public static void main(String[] args) {        int[] arr = new int[] { 3, 1, 6, 5, 4 };        //排序前        print(arr);        bubbleSort(arr);        //排序后        print(arr);    }        public static void print(int temp[]) {        for (int i = 0; i < temp.length; i++) {            if (i != temp.length - 1)                System.out.print(temp[i] + ", ");            else                System.out.println(temp[i]);        }    }        //冒泡排序    public static void bubbleSort(int temp[]) {        for (int i = 0; i < temp.length - 1; i++)            for (int j = 0; j < temp.length - i - 1; j++) //-x:让每一次比较的元素减少,-1:避免下标越界                if (temp[j] > temp[j+1]) {                    int t = temp[j];                    temp[j] = temp[j+1];                    temp[j+1] = t;                }    }}
View Code

   3° 二分搜索算法

   核心思路如下图:

  

   (以C语言为例)

#include 
int search(int key, int a[], int len);int main(void){ int k = 36; int number[] = {
2, 4, 7, 11, 13, 16, 21, 24, 27, 32, 36, 40, 46}; int r = search(k, number, sizeof(number) / sizeof(number[0])); if(r > -1) printf("%d\n", number[r]); return 0;}// 二分搜索(排好序的数组)int search(int key, int a[], int len){ int ret = -1; int left = 0; int right = len - 1; while(right >= left) // 条件应该是right >= left,而不应是right > left { int mid = (left + right) / 2; if(a[mid] == key) { ret = mid; break; } else if(a[mid] > key) right = mid - 1; else left = mid + 1; } return ret;}
View Code

    (以JAVA语言为例)

 

   4° 一个统计单词数的小程序

#include 
#include
#include
// 统计单词数的函数int count_word(char * str);int main(void){ char str[101]; puts("请输入一个字符串:"); gets(str); printf("统计的单词数是:%d", count_word(str)); return 0;}int count_word(char * str){ bool inword = false; int n_words = 0; while(*str) { if(!isspace(*str) && !inword) { inword = true; n_words++; } if(isspace(*str) && inword) inword = false; str++; } return n_words;}
View Code

 

转载于:https://www.cnblogs.com/yerenyuan/p/5068868.html

你可能感兴趣的文章
配置虚拟机网络的三种方式
查看>>
强大的模板引擎开源软件NVelocity
查看>>
ViewPager的简单用法+适配器+监听器的介绍
查看>>
Tomcat全攻略
查看>>
(转)SDL 1.2 to 2.0 Migration Guide--SDL1.2更新到SDL2.0指南
查看>>
RMAN-FORMAT-CONFIGURE及动态性能表
查看>>
微软最牛MS08-067漏洞各系统补丁下载地址
查看>>
JSP验证码
查看>>
C# 导出CSV功能记录下
查看>>
WebGL 入门-WebGL简介与3D图形学
查看>>
memset函数具体说明
查看>>
JavaScript可否多线程? 深入理解JavaScript定时机制
查看>>
Android系统Recovery工作原理之使用update.zip升级过程---updater-script脚本语法简介以及执行流程(转)...
查看>>
实用国际(XX)计量单位表
查看>>
OJ2.0userInfo页面Modify逻辑bug修复,search功能逻辑实现
查看>>
使用反射动态创建类型实例
查看>>
配置SQL Server 2008 R2 Reporting Services
查看>>
WebServices中Xml的序列化
查看>>
[转]测试的三重境界
查看>>
share
查看>>