参考实例:
#include <stdio.h> typedef void (*p_func)(int *, int); void select_sort(int *arr, int size) //选择排序 { int i = 0, j = 0; for(i = 0; i < size; i++) { for(j = i; j < size; j++) { if(arr[i] > arr[j] ) { arr[i] ^= arr[j]; arr[j] ^= arr[i]; arr[i] ^= arr[j]; } } } } void bubble_sort(int *arr, int size) //冒泡排序 { int i = 0, j = 0; for(i = 1; i < size; i++) { for(j = 0; j < size - i; j++) { if(arr[j] > arr[j+1]) { arr[j] ^= arr[j+1]; arr[j+1] ^= arr[j]; arr[j] ^= arr[j+1]; } } } } void quick_sort(int *arr, int size) //快速排序 { if(size <= 1) return; int base = *arr; int head = 0, tail = size - 1; while(head < tail) { if(arr[head] > arr[tail]) { arr[head] ^= arr[tail]; arr[tail] ^= arr[head]; arr[head] ^= arr[tail]; } if(arr[head] == base) tail--; else head++; } quick_sort(arr, head - 1); quick_sort(&arr[head + 1], size - head - 1); } int main() { int arr[] = {0, 4, 2, 8, 6, 1, 5, 9, 3, 7}; int i = 0, j = 0; p_func p_sort[] = {select_sort, bubble_sort, quick_sort}; for(i = 0; i <= 2; i++) { p_sort[i](arr, sizeof(arr)/sizeof(int)); i == 0 ? printf("select : ") : i == 1 ? printf("bubble : ") : printf("quick : "); for(j = 0; j < sizeof(arr)/sizeof(int); j++) printf("%d ", arr[j]); printf("\n"); } return 0; }
参考方法:
#include<stdio.h> #include<stdlib.h> void bubblesort(int a[],int n) { int i, j; int flag ; for(i = 0; i < n - 1; i++) { flag = 0; for(j = 0; j < n - 1; j++) { int temp; if(a[j] > a[j + 1]) { temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; flag = 1; } } if(flag == 0) break; } } int mycmp(const void *a,const void *b) { if((const int *)a - (const int *)b == 0) return 0; else if((const int *)a - (const int *)b > 0) return 1; else return -1; } int main(void) { int a[10]; printf("请输入 10 个数字:\n"); for(int i = 0; i < 10; i++) scanf("%d",&a[i]); qsort(a,10,sizeof(int),mycmp); //快速排序 bubblesort(a,10);//冒泡排序 printf("排序结果是:\n"); for(int i = 0; i < 10; i++) printf("%d ",a[i]); return 0; }
基础算法之简单选择排序(selection sort)
1,名 称:简单选择排序
2,复杂度:O(n^2)
3,实现方式:C语言
4,空间复杂度:O(1)
5,稳定性:不稳定
6,算法思想:总共遍历两次,外层循环是算法总共要至执行的此数,那么为什么呢?因为该算法每一次执行外层循环会进行一次交换,默认i所在的位置是最大或者最小(要根据升序还是降序确定),然后里层循环是确定要交换的数字,请具体的思想请大家去代码中体会吧!
7,算法种类:升序(ascending order)、降序(descending order)
8,算法实现代码:
注意:以下实例在 Windows 平台编译通过, Linux 上没有 conio.h 文件,所以无法编译通过。Linux 上可以使用 #include <curses.h> 来代替 conio.h 文件提供的功能,安装方法:ubuntu:sudo apt-get install libncurses5-dev libncursesw5-devCentos:sudo yum install ncurses-devel ncurses
注意:以下实例在 Windows 平台编译通过, Linux 上没有 conio.h 文件,所以无法编译通过。
ubuntu:
sudo apt-get install libncurses5-dev libncursesw5-dev
Centos:
sudo yum install ncurses-devel ncurses
#include "stdio.h" #include "conio.h" void swap(int *a, int *b){ int temp ; temp = *a; *a = *b; *b = temp; } //升序---简单选择排序 SelectionSortAsc(int *a,int n){ int i,j,min; for( i = 0;i < 10; i++){ min = i; for(j = i+1;j < 10; j++){ if(a[j] < a[min]){ min = j; } } if(min != i) swap(&a[i],&a[min]); } printf("\n ascending order:"); } //降序---简单选择排序 SelectionSortDesc(int *a,int n){ int i,j,max; for( i = 0;i < 10; i++){ max = i; for(j = i+1;j < 10; j++){ if(a[j] > a[max]){ max = j; } } if(max != i) swap(&a[i],&a[max]); } printf("\n descending order:"); } main(){ int i; int a[20] = {10,8,6,5,3,2,9,7,4,1}; SelectionSortAsc(a,10); for(i = 0 ; i < 10; i++) printf("%d ",a[i]); printf("\n"); SelectionSortDesc(a,10); for(i = 0 ; i < 10; i++) printf("%d ",a[i]); getche(); }
#include <stdio.h> #define N 101 int prime[N],pNum=0; int p[N]={0}; //0表示为素数,1表示为非素数 void Find_Prime(){ int i,j; for(i=2;i<N;i++){ if(p[i]==0){ prime[pNum++]=i; //埃氏筛法 for(j=i+i;j<N;j+=i) p[j]=1; } } } int main(){ Find_Prime(); int i; for(i=0;i<pNum;i++){ printf("%d ",prime[i]); } return 0; }
//使用数组存储已经获得的素数,使用该数组做为底,当取值范围较大时可有效减少运算量 #include<stdio.h> int main() { int i,j,k=0,n; //k为素数数组的下标 int prime[1000]; //建立一个素数数组 printf("请输入求素数值的范围(0-1000):\n"); scanf("%d",&n); prime[0]=2; //给第一个数组元素赋值 for(i=2;i<=n;i++) { for(j=0;j<=k;j++) { if(i%prime[j]==0) //求余比较只要对当前的素数数组求余即可 break; } if(j>k) { k++; //判断i是否为素数,如果是,将其加入数组,下标k加一 prime[k]=i; } } for(i=0;i<=k;i++) printf("%d ",prime[i]); }
感谢您的支持,我会继续努力的!
支付宝扫一扫,即可进行扫码打赏哦
1795c-exercise-example37
参考实例:
1794c-exercise-example37
参考方法:
1793c-exercise-example37
基础算法之简单选择排序(selection sort)
1,名 称:简单选择排序
2,复杂度:O(n^2)
3,实现方式:C语言
4,空间复杂度:O(1)
5,稳定性:不稳定
6,算法思想:总共遍历两次,外层循环是算法总共要至执行的此数,那么为什么呢?因为该算法每一次执行外层循环会进行一次交换,默认i所在的位置是最大或者最小(要根据升序还是降序确定),然后里层循环是确定要交换的数字,请具体的思想请大家去代码中体会吧!
7,算法种类:升序(ascending order)、降序(descending order)
8,算法实现代码:
1792c-exercise-example36
参考方法:
1791c-exercise-example36
参考方法: