冒泡排序优化

直接上代码:

#define swap(a,b) {a ^= b; b ^= a; a ^= b;}

void sort(int *arr, int num){

for(int i = 0; i < num - 1; ++i){

bool isOk = true;   // 是否排序完成

for(int j = 0; j < num - 1 - i; ++j){

if(arr[j] > arr[j + 1]){

isOk = false;

swap(arr[j], arr[j + 1]);

}

if(isOk){

return;

}

}

}

void test(){

int arr[5] = {0,2,1,4,5};

sort(arr, 5);

}

思路:冒泡排序,假设排序都已经排完了,就直接退出。避免多余排序(不发生交换的时候就排序完成了);

每一轮排序完成之后,最大的数字就已经在最后了,就可以不比较最后一个数字;

冒泡排序优化,布布扣,bubuko.com

时间: 2024-08-03 20:33:19

冒泡排序优化的相关文章

冒泡排序优化JAVA

本文对传统的冒泡排序进行了一些优化,减少了循环次数. 时间复杂度 若文件的初始状态是正序的,一趟扫描即可完成排序.所需的关键字比较次数 C 和记录移动次数 M 均达到最小值: C(min)=n-1 , M(min)=0 .所以,冒泡排序最好的时间复杂度为 O(n); 若初始文件是反序的,需要进行  趟排序.每趟排序要进行  次关键字的比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置.在这种情况下,比较和移动次数均达到最大值: 冒泡排序的最坏时间复杂度为O(n^2) . 综上

冒泡排序-优化后的

时间复杂度 若文件的初始状态是正序的,一趟扫描即可完成排序.所需的关键字比较次数  和记录移动次数  均达到最小值:  ,  .所以,冒泡排序最好的时间复杂度为  . 若初始文件是反序的,需要进行  趟排序.每趟排序要进行  次关键字的比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置.在这种情况下,比较和移动次数均达到最大值: 冒泡排序的最坏时间复杂度为 . 综上,因此冒泡排序总的平均时间复杂度为 . 算法稳定性 冒泡排序就是把小的元素往前调或者把大的元素往后调.比较是相邻

冒泡排序优化以及插入排序(本文凝视较少适合有一定基础的观看)

#include<stdio.h> #define cnt 6 //定义排序个数 //冒泡排序优化 void Bubble_Sort(int A[],int N) { for(int P = N - 1; P >= 0;P--) { int flag = 0; //定义一个flag推断之后的序列是否有序 for(int i = 0;i < P;i++) //一趟冒泡 { if(A[i] > A[i+1]) //一次一次的冒泡 { int temp = A[i+1]; A[i+

冒泡排序优化以及插入排序(本文注释较少适合有一定基础的观看)

#include<stdio.h> #define cnt 6 //定义排序个数 //冒泡排序优化 void Bubble_Sort(int A[],int N) { for(int P = N - 1; P >= 0;P--) { int flag = 0; //定义一个flag判断之后的序列是否有序 for(int i = 0;i < P;i++) //一趟冒泡 { if(A[i] > A[i+1]) //一次一次的冒泡 { int temp = A[i+1]; A[i+

C#版冒泡排序优化

之前写了一个C#版冒泡排序的实现.由于之前的版本是用两层for循环来实现的,这个版本的排序还是有进一步优化的空间的. 之前的排序: int temp = 0; for (int i = arr.Length - 1; i > 0; i--) { for (int j = 0; j < i; j++) { if (arr[j] > arr[j + 1]) { temp = arr[j + 1]; arr[j + 1] = arr[j]; arr[j] = temp; } } } 能够看出,

求单独出现的数,冒泡排序优化,strncpy的优化

求未配对的数(1): 在一组数据中有 只有一个数出现了一次,其余的数都是成对的出现,请找出这个数:这个题很容易解决,只要把这组数据全部异或(相同为零,不同为1),所以出现两次的数异或后就为零,最后剩下的就是出现一次的数. #include<stdio.h> #include<stdlib.h> int find_once_num(int arr[], int len ) {                  int num = 0;                  for (in

面试 | 冒泡排序优化

一般冒泡排序: void bubble_sort(vector<int>& nums) { int i, j; int len = nums.size(); for (i = 0; i < len - 1; i++) for (j = 0; j < len - 1 - i; j++) if (arr[j] > arr[j + 1]) swap(arr[j], arr[j + 1]); } 优化后冒泡排序: 加入一个布尔变量,作用是标识该轮有没有进行数据的交换,若在某一

2种冒泡排序优化

直接上代码: #define swap(a,b) {a ^= b; b ^= a; a ^= b;} void sort(int *arr, int num){ for(int i = 0; i < num - 1; ++i){ bool isOk = true;   // 是否排序完毕 for(int j = 0; j < num - 1 - i; ++j){ if(arr[j] > arr[j + 1]){ isOk = false; swap(arr[j], arr[j + 1])

JAVA 蹒跚自学之 第七日 数组选择 冒泡排序优化

原来的选择排序代码 int [] arr = new int[]{3,2,6,9,34,66,11}; public static void xuanze(int[] arr) { for (int x=0;x<arr.length-1;x++) { for(int y=x+1:y<arr.length;y++) { if(arr[x]>arr[y] { arr[x]=arr[x]^arr[y]; arr[y]arr[x]^arr[y]; arr[x]=arr[x]^arr[y]; }