针对排序算法,我们先分别实现了冒泡排序和插入排序,其中插入排序实现了4个版本,但其核心都只有一种啦,就是在插入当前元素的时候确保前面已经插入的元素已经排好序了;而冒泡排序呢,则是经过n-1或者n次比较,每次选出最大或最小的元素放到数组的尾部从右往左一次排放,其实用栈也可以实现哈,下面看看对应的代码及其运行结果,更加深入的理解它啦!!!
#include <iostream>
#include <string>
using namespace std;
void insertSort_while05(int arr[],int n){
for(int i=0;i<n;i++){
int value=arr[i],j=i-1;
while(j>=0&&value>arr[j]){
arr[j+1]=arr[j];
j--;
}
arr[j+1]=value;
}
}
void insertSort_while04(int arr[],int n){
for(int i=0;i<n;i++){
int value=arr[i],j=i;
while(j>0&&value>arr[j-1]){
arr[j]=arr[j-1];
j--;
}
arr[j]=value;
}
}
void insertSort_while03(int arr[], int n){
for (int i = 0; i < n; i++){
int j = i - 1, value = arr[i];
while (j >= 0){
if (value>arr[j]){
arr[j + 1] = arr[j];
j--;
}
else{
break;
}
}
arr[j + 1] = value;
}
}
void insertSort_while02(int arr[], int n){
for (int i = 1; i < n; i++){
int j = i, value = arr[i];
while (j>0 && value >arr[j-1]){
arr[j] = arr[j - 1];
j--;
}
arr[j] = value;
}
}
void insertSort_while(int arr[], int n){
for (int i = 1; i < n; i++){
int j = i - 1, value = arr[i];
while (j >= 0){
if (value > arr[j]){
arr[j + 1] = arr[j];
j--;
}
else{
break;
}
}
arr[j + 1] = value;
}
}
void insertSort_for(int arr[], int n){
for (int i = 1; i < n; i++){
int value = arr[i], j = 0;
for (j = i-1; j >= 0; j--){
if (value>arr[j]){
arr[j+1] = arr[j];
}
else{
break;
}
}
arr[j + 1] = value;
}
}
void bubbleSort(int arr[],int n){
for(int i=1;i<len;i++){
for(int j=0;j<len-i;j++){
int temp=0;
if(arr[j]<arr[j+1]){
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
void bubbleSort(int arr[], int n){
for (int i = 0; i < n-1; i++){
int j = 0;
for (j = 0; j < n - 1 - i; j++){
int temp = 0;
if (arr[j]<arr[j + 1]){
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
cout << arr[j] << endl;
}
}
int main(){
int arr[] = { 10, 100, 30, 50, 40, 20, 1, 300 };
insertSort_while03(arr, 8);
//bubbleSort(arr, 8);
for (int i = 0; i < 8; i++){
cout << arr[i] << " ";
}
return 0;
}
运行结果: