c语言常见的几种排序方法总结

  一:选择排序和冒泡排序

  这两种排序比较简单,直接贴出代码:

  

 1 #include <stdio.h>
 2
 3 void choose_sort(int *arr, int n);
 4 void bubble_sort(int *arr, int n);
 5 void show(int *arr, int n);
 6
 7 int main()
 8 {
 9     int arr[10] = {10, 8, 3, 15, 18, 16, 11, 9, 7, 6};
10
11     /*选择排序*/
12     choose_sort(arr, 10);
13     show(arr, 10);
14
15     /*冒泡排序*/
16     bubble_sort(arr, 10);
17     show(arr, 10);
18
19     return 0;
20 }
21
22 void choose_sort(int *arr, int n)
23 {
24     int i = 0;
25     int j = 0;
26     int index = 0;
27     int swap = 0;
28
29     for(i = 0; i < n; i++) {
30         index = i;
31         for(j = i; j <n; j++ ) {
32             if(arr[index] > arr[j]) {
33                 index = j;
34             }
35         }
36         swap = arr[i];
37         arr[i] = arr[index];
38         arr[index] = swap;
39     }
40 }
41
42 void bubble_sort(int *arr, int n)
43 {
44     int i = 0;
45     int j = 0;
46     int swap = 0;
47
48     for(i = 0; i < n - 1; i++) {
49         for(j = 0; j < n - i - 1; j++) {
50             if(arr[j] > arr[j + 1]) {
51                 swap = arr[j];
52                 arr[j] = arr[j + 1];
53                 arr[j + 1] = swap;
54             }
55         }
56     }
57 }
58
59 void show(int *arr, int n)
60 {
61     int i = 0;
62     for(i = 0; i < n; i++) {
63         printf("%d ", arr[i]);
64     }
65     printf("\n");
66 }

  二:插入排序

  下面代码是在一个有序数组中的插入一个数,插入后仍然有序:

 1 #include <stdio.h>
 2
 3 void insert_sort(int *arr, int num, int n);
 4
 5 int main()
 6 {
 7     int arr[10] = {1, 2, 4, 6, 8, 9, 12, 15, 19};
 8     insert_sort(arr, 20, 9);
 9
10     int i = 0;
11     for(i = 0; i < 10; i++) {
12         printf("%d ", arr[i]);
13     }
14     printf("\n");
15
16     return 0;
17 }
18
19 void insert_sort(int *arr, int num, int n)
20 {
21     int i = 0;
22     int index = 0;
23
24     for(i = 0; i < n; i++) {
25         if(arr[i] > num) {
26             index = i;
27             break;
28         }
29     }
30
31     if(i == n) {
32         arr[i] = num;
33     }
34     else {
35         for(i = n; i >= index; i--) {
36              arr[i + 1] = arr[i];
37         }
38         arr[index] = num;
39     }
40 }

  三:快速排序

 1 #include <stdio.h>
 2
 3 void quick_sort(int *arr, int low, int high);
 4 void show(int *arr, int n);
 5
 6 int main()
 7 {
 8     int arr[8] = {8, 3, 9, 4, 10, 7, 6, 1};
 9
10     quick_sort(arr, 0, 7);
11     show(arr, 8);
12
13     return 0;
14 }
15
16 void quick_sort(int *arr, int low, int high)
17 {
18     int pivot = 0;
19     int i = 0;
20     int j = 0;
21     if(high <= low)
22         return;
23
24     pivot = arr[low];
25     i = low;
26     j = high;
27
28     while(i < j) {
29         while(i < j && arr[j] > pivot)
30             j--;
31         if(i < j)
32             arr[i++] = arr[j];
33         while(i < j && arr[i] < pivot)
34             i++;
35         if(i < j)
36             arr[j--] = arr[i];
37     }
38     arr[i] = pivot;
39     quick_sort(arr, low, i - 1);
40     quick_sort(arr, i + 1, high);
41 }
42
43 void show(int *arr, int n)
44 {
45     int i = 0;
46     for(i = 0; i < n; i++) {
47         printf("%d ", arr[i]);
48     }
49     printf("\n");
50 }

快速排序涉及到递归调用,比较难理解,最好在纸上画出执行过程,慢慢理解

  

时间: 2024-12-28 13:56:35

c语言常见的几种排序方法总结的相关文章

Java中数组常见的几种排序方法!

数组的定义: int[] arr = new int[5]; int[] arr1 = {1,2,3,4,5}; long[] arr2 = new long[6]; String[] strs = new String[5]; Person[] ps = new Person[5]; 数组的操作: int[] arr = {45, 34, 53, 43}; Arrays.sort(arr); System.out.println(Arrays.toString(arr)); // 二分搜索法(

常见的2种断点方法

[常见的2种断点方法] 1.中断断点. 2.内存断点. 常见的2种断点方法,码迷,mamicode.com

JAVA中运用数组的四种排序方法

JAVA中在运用数组进行排序功能时,一般有四种方法:快速排序法.冒泡法.选择排序法.插入排序法. 快速排序法主要是运用了Arrays中的一个方法Arrays.sort()实现. 冒泡法是运用遍历数组进行比较,通过不断的比较将最小值或者最大值一个一个的遍历出来. 选择排序法是将数组的第一个数据作为最大或者最小的值,然后通过比较循环,输出有序的数组. 插入排序是选择一个数组中的数据,通过不断的插入比较最后进行排序.下面我就将他们的实现方法一一详解供大家参考. <1>利用Arrays带有的排序方法快

php常见的几种排序以及二分法查找

<?php 1.插入排序 思想: 每次将一个待排序的数据元素插入到前面已经排好序的数列中,使数列依然有序,知道待排序数据元素全部插入完为止. 示例: [初始关键字] [49] 38 65 97 76 13 27 49J=2(38) [38 49] 65 97 76 13 27 49J=3(65) [38 49 65] 97 76 13 27 49J=4(97) [38 49 65 97] 76 13 27 49J=5(76) [38 49 65 76 97] 13 27 49J=6(13) [1

两种排序方法 网易2017内推编程题

考拉有n个字符串字符串,任意两个字符串长度都是不同的.考拉最近学习到有两种字符串的排序方法: 1.根据字符串的字典序排序.例如: "car" < "carriage" < "cats" < "doggies < "koala" 2.根据字符串的长度排序.例如: "car" < "cats" < "koala" < &

两种排序方法(直接判断)

题目描述 考拉有n个字符串字符串,任意两个字符串长度都是不同的.考拉最近学习到有两种字符串的排序方法: 1.根据字符串的字典序排序.例如:"car" < "carriage" < "cats" < "doggies < "koala"2.根据字符串的长度排序.例如:"car" < "cats" < "koala" <

三种排序方法(c语言)

1 #include "stdio.h" 2 void main() 3 {void read_data(int a[],int n); 4 void write_data(int a[],int n); 5 void comp(int a[],int n); 6 void insert(int a[],int n); 7 void bubble(int a[],int n); 8 int i,n=0,a[200]; 9 printf("请输入元素个数:"); 10

常见的几种数组排序方法

---恢复内容开始--- 一.研究数组排序的意义: 数据结构中,排序算法各有用处,不同的排序方法有不同的时间复杂度与空间复杂度.为了能够依据不同情况,选用不同的排序方法解决不同的问题. 二.常见的数组排序方法: 以下研究,默认是对操作数组进行从小到大的排序.使用语言是Java. 1.选择排序法 选择排序法是将需要操作的数组分为已排序部分和未排序部分两部分.未排序的数组元素中,最小(或最大)的元素依次按照获得顺序放入已排序的元素中. public static boolean sortByChoi

Java中的几种排序方法

日常操作中常见的排序方法很多,比如有:冒泡排序.快速排序.选择排序.插入排序.希尔排序,甚至还有基数排序.鸡尾酒排序.桶排序.鸽巢排序.归并排序等. 一.冒泡排序 一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来. 走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成.这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端. 1 /** 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 2 *对每一对相邻元