【通俗易懂-动态图解析】冒泡排序、选择排序

冒泡排序

冒泡排序算法的原理如下:

1:比较相邻的元素。如果第一个比第二个大,就交换他们两个。

2:对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。

3:针对所有的元素重复以上的步骤,除了最后一个。

4:持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

C语言实现:

#include<stdio.h>

void swapSort(int *a, int count);

void showArray(int *a, int count);

void showArray(int *a, int count){

int i;

for(i = 0; i < count; i++){

printf("%d ", a[i]);

}

printf(" ");

}

void swapSort(int *a, int count){

int i;

int j;

int tmp;

for(i = 0; i < count; i++){

for(j = 0; j < count-i; j++){

if(a[j] > a[j+1]){ //将大的数字放在最后面

tmp = a[j];

a[j] = a[j+1];

a[j+1] = tmp;

}

}

}

}

void main(void){

int a[] = {3, 5, 7, 9, 1, 6, 10};

int count = sizeof(a)/sizeof(int);

swapSort(a, count);

showArray(a, count);

}

C++语言实现:

#include <iostream>

using namespace std;

void print(int a[], int n ){

cout<<n <<":";

for(int j= 0; j<n; j++){

cout<<a[j] <<" ";

}

cout<<endl;

}

void InsertSort(int a[], int n)

{

for(int i= 0; i < n; i++)

{

int tmp = 0;

for (int j = i+1; j < n; j++)

{

if (a[i] > a[j])

{

tmp = a[i];

a[i] = a[j];

a[j] = tmp;

}

}

print(a,n);

}

}

int main(){

int a[9] = {3,1,5,7,2,4,9,6,2};

InsertSort(a,9);

print(a,9);

}

时间复杂度:O(n^2);

选择排序

依次是下标为(0,1,2,....n)的数字和其后的所有数字进行比较,每一轮的比较结果:都先确定最前面的是最小的数字;

C语言实现:

#include<stdio.h>

void sort(int *a, int count);

void showArray(int *a, int count);

void showArray(int *a, int count){

int i;

for(i = 0; i < count; i++){

printf("%d ", a[i]);

}

printf(" ");

}

void sort(int *a, int count){

int i;

int j;

int tmp;

for(i = 0; i < count; i++){

for(j = i+1; j < count; j++){

if(a[i] > a[j]){

tmp = a[i];

a[i] = a[j];

a[j] = tmp;

}

}

}

}

void main(void){

int a[] = {3 ,5 ,6, 1, 7, 2, 9, 8};

int count = sizeof(a)/sizeof(int);

sort(a, count);

showArray(a, count);

}

C++语言实现:

#include<iostream>

using namespace std;

void print(int a[], int n)

{

for(int j= 0; j<n; j++)

{

cout<<a[j] <<" ";

}

cout<<endl;

}

void selectSort(int a[], int len)

{

int minindex, temp;

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

{

minindex = i;

for(int j = i+1; j<len; j++)

{

if(a[j]<a[minindex])

minindex = j;

}

temp = a[i];

a[i] = a[minindex];

a[minindex] = temp;

}

}

int main()

{

int a[10] = {8,1,9,7,2,4,5,6,10,3};

cout<<"初始序列:";

print(a,10);

selectSort(a,10);

cout<<"排序结果:";

print(a,10);

system("pause");

}

时间复杂度为:O(n^2);

订阅号编程小兔崽,收看更多精彩内容

经验分享 程序员 微信小程序 职场和发展