C语言冒泡排序(升序)
生活随笔
收集整理的這篇文章主要介紹了
C语言冒泡排序(升序)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
什么是冒泡排序:
冒泡排序就是將一組數據進行排序,首先是從相鄰的兩個元素比較,大的值放在后面,依次往后操作找出最大值,并放在最后一位。
這里我們舉例
? ? ? ? ? ? ? ? arr[10] = { 9,5,4,3,2,1,0,6,7,,8 };
如第一個元素9依次比較會跑到最后一個位子
在從頭開始第二大的元素將跑到倒數第二個位置
讓后反復循環(huán),進行排序。
簡單的冒泡排序:
#include<stdio.h> int main() {int arr[10] = { 9,5,4,3,2,1,0,6,7,8 };int cz = sizeof(arr) / sizeof(arr[0]);int tmp = 0;int i = 0, j = 0;for ( i = 0; i < cz-1 ; i++)//大的比較{for ( j = 0; j < cz - i - 1 ; j++)//小的比較{if (arr[j] > arr[j + 1]){tmp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = tmp;}}}for (int i = 0; i < cz; i++)printf("%d ", arr[i]);return 0; }冒泡排序改進1:
我們發(fā)現如果在某一次小的比較后,已經完全成為有序數組,我們就不必再進行下一次大的比較,直接退出循環(huán)即可。
#include<stdio.h> int main() {int arr[10] = { 9,5,4,3,2,1,0,6,7,8 };int cz = sizeof(arr) / sizeof(arr[0]);int tmp = 0;int i = 0, j = 0;int m = 1;for ( i = 0; i < cz-1 ; i++)//大的比較{m = 1;for ( j = 0; j < cz - i - 1 ; j++)//小的比較{if (arr[j] > arr[j + 1]){tmp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = tmp;m = 0;}}if (m){break;}}for (int i = 0; i < cz; i++)printf("%d ", arr[i]);return 0; }改進2:?
我們發(fā)現在進行第一次大的比較后,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?arr[10] = { 5,4,3,2,1,0,6,7,8,9 };
數組的后半部分已經有序,我們可以跳過他們。
逃過方法:記錄最后改變位置的坐標,并讓j<這個坐標即可
#define _CRT_SECURE_NO_WARNINGS 1 //改為升序 #include<stdio.h> int main() {int arr[10] = { 9,5,4,3,2,0,1,6,7,8 };int cz = sizeof(arr) / sizeof(arr[0]);int tmp = 0;int i = 0, j = 0;int m = 1;int last_change = cz;for ( i = 0; i < cz-1 ; i++)//大的比較{m = 1;for ( j = 0; (j < cz - i - 1) && ( j < last_change) ; j++)//小的比較{if (arr[j] > arr[j + 1]){tmp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = tmp; m =0; }} last_change = j + 1;if (m){break;}}for (int i = 0; i < cz; i++)printf("%d ", arr[i]);return 0; }總結
以上是生活随笔為你收集整理的C语言冒泡排序(升序)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TCP/IP——TCP数据包分析
- 下一篇: php手机靓号选号系统源码_最好的手机靓