c语言数据结构-算法篇之冒泡排序
生活随笔
收集整理的這篇文章主要介紹了
c语言数据结构-算法篇之冒泡排序
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
文章目錄
- 前言
- 一、冒泡排序是什么?
- 二、簡單版冒泡排序
- 1.升序,降序
- 2.代碼
- 改進版
前言
排序方法是一種重要的,基本的算法。排序的方法很多,本章就介紹冒泡排序
一、冒泡排序是什么?
1)比較相鄰的元素。如果第一個比第二個大,就交換他們兩個;
2)對每一對相鄰元素作同樣的工作,從開始第一對到結(jié)尾的最后一對。這步做完后,最后的元素會是最大的數(shù);
3)針對所有的元素重復(fù)以上的步驟,除了最后一個;
4)持續(xù)每次對越來越少的元素重復(fù)上面的步驟,直到?jīng)]有任何一對數(shù)字需要比較。
二、簡單版冒泡排序
1.升序,降序
升序思路:第一躺從第一個數(shù)開始,依次往后比較相鄰的兩個數(shù),如果前面的數(shù)比后邊的數(shù)大則交換兩個數(shù)的位置,直到最大得數(shù)移動到后邊。第二躺也從第一個數(shù)開始,不過因為最后邊得數(shù)已經(jīng)是最大得了不用再比較。
從冒泡的比較思路可以得如果有n個數(shù),則要比較n-1躺,再每一趟中要比較n-j次(j是躺次)
降序則是如果前面的數(shù)比后邊的數(shù)小則交換兩個數(shù)的位置,其余是一樣得。
2.代碼
代碼如下(示例):
#include <string.h> #include <malloc.h> #include <stdio.h> #include <math.h>#define maxn 1000void swap(int* x, int* y) //交換元素 {int tem;tem = *x;*x = *y;*y = tem; }void show(int* arr, int n) {for (int i = 0; i < n; i++)printf_s("%d ", arr[i]);printf_s("\n"); }void BubbleSort(int* arr,int key,int n) {// 1 是升序,0是降序if (key)//升序{for (int i = 0; i < n-1; i++) // n個數(shù)只要比較 n-1次{for (int j = 0; j < n-1 - i; j++) //每一次只有進行n-i次比較{if (arr[j] > arr[j + 1])swap(&arr[j], &arr[j + 1]);}show(arr, n);}}else //降序{for (int i = 0; i < n-1; i++){for (int j = 0; j < n-1 - i; j++){if (arr[j] < arr[j + 1])swap(&arr[j], &arr[j + 1]);}show(arr, n);}} } int main() {int arr[maxn] = {};//默認初始化int n;scanf_s("%d", &n);for (int i = 0; i < n; i++)scanf_s("%d", &arr[i]);BubbleSort(arr, 1,n);return 0; }改進版
因為排序的過程中,各元素不斷接近自己的位置,如果一趟比較下來沒有進行過交換,就說明序列有序, 因此要在排序過程中設(shè)置一個標(biāo)志flag判斷元素是否進行過交換, 從而減少不必要的比較。
#include <string.h> #include <malloc.h> #include <stdio.h> #include <math.h>#define maxn 1000void swap(int* x, int* y) //交換元素 {int tem;tem = *x;*x = *y;*y = tem; }void show(int* arr, int n) {for (int i = 0; i < n; i++)printf_s("%d ", arr[i]);printf_s("\n"); }void BubbleSort(int* arr,int key,int n) {int flag = 1;// 1 是升序,0是降序if (key)//升序{for (int i = 0; i < n-1; i++) // n個數(shù)只要比較 n-1次{flag = 0;//更新標(biāo)識符for (int j = 0; j < n-1 - i; j++) //每一次只有進行n-i次比較{if (arr[j] > arr[j + 1]){swap(&arr[j], &arr[j + 1]);flag = 1;}}show(arr, n);if (flag == 0)return;}}else //降序{for (int i = 0; i < n-1; i++){flag = 0;for (int j = 0; j < n-1 - i; j++){if (arr[j] < arr[j + 1])swap(&arr[j], &arr[j + 1]);}show(arr, n);if (flag == 0)return;}} } int main() {int arr[maxn] = {};//默認初始化int n;scanf_s("%d", &n);for (int i = 0; i < n; i++)scanf_s("%d", &arr[i]);BubbleSort(arr, 1,n);return 0; }總結(jié)
以上是生活随笔為你收集整理的c语言数据结构-算法篇之冒泡排序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python join()函数
- 下一篇: c语言数据结构-算法篇之选择排序