冒泡排序
冒泡排序
#include <iostream>
using namespace std;
//对a[]进行正序(从小到大)排序
void bubblesort(int* a, int len) //形参a取到实参a传递过来的数组首地址
//然后解引用,取到数组的值
{
for (int i = 0; i < len - 1; i++) //i控制排序的轮数
{
for (int j = 0; j < len - i - 1; j++) //j控制每轮需要比较的次数
{
if (a[j + 1] < a[j]) //不满足正序要求,交换顺序
{
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}
int main()
{
int a[10] = { 2,6,3,8,5,1,0,7,9,4 };
int len = sizeof(a) / sizeof(int); // 计算数组元素个数
bubblesort(a, len); //a为数组a[10]首地址,作为实参传递给形参
for (int i = 0; i < len; i++)
{
cout << a[i] << " ";
}
return 0;
}
快速排序
快速排序
//快速排序
#include <iostream>
using namespace std;
void QuickSort(int* array, int low, int high) { //快排
if (low >= high) { //若待排序序列只有一个元素,返回空
return;
}
int i = low; //i作为指针从左向右扫描
int j = high; //j作为指针从右向左扫描
int key = array[low];//第一个数作为基准数
while (i < j) {
while (array[j] >= key && i < j) { //从右边找小于基准数的元素 (此处由于j值可能会变,所以仍需判断i是否小于j)
j--; //找不到则j减一
}
array[i] = array[j]; //找到则赋值
while (array[i] <= key && i < j) { //从左边找大于基准数的元素
i++; //找不到则i加一
}
array[j] = array[i]; //找到则赋值
}
array[i] = key; //当i和j相遇,将基准元素赋值到指针i处
QuickSort(array, low, i - 1); //i左边的序列继续递归调用快排
QuickSort(array, i + 1, high); //i右边的序列继续递归调用快排
}
int main() {
int array[] = { 49,38,65,97,76,13,27,49 };
int length = sizeof(array) / sizeof(*array); //计算数组中一共有多少个数
cout << "原始序列:";
for (int i = 0; i < length; i++) {
cout << array[i] << " ";
}
cout << endl;
QuickSort(array, 0, length - 1);
cout << "快排序列:";
for (int i = 0; i < length; i++) {
cout << array[i] << " ";
}
system("pause");
return 0;
}
插入排序
插入排序
#include<iostream>
using namespace std;
int main() {
int a[6] = { 2, 6, 5, 3, 4, 1 };
int temp, i, j;
int n = 6;
for (i = 1; i < 6; i++) { // 数组的下标是从0开始的
// 这里从第二个数开始枚举 即假定第一个数是有序的
temp = a[i];
j = i; // 这里temp 临时储存每一次需要排序的数
while (j >= 1 && temp < a[j - 1]) {
a[j] = a[j - 1];
j--;
}
a[j] = temp;
}
for (i = 0; i < 6; i++) {
cout << a[i] << " ";
}
cout << endl;
system("pause");
return 0;
}
选择排序
选择排序
#include <iostream>
using namespace std;
void selectionSort(int arr[], int n) {
for (int i = 0; i < n; i++) {
// 寻找[i, n)区间里的最小值
int minIndex = i;
for (int j = i + 1; j < n; j++)
if (arr[j] < arr[minIndex])
minIndex = j;
swap(arr[i], arr[minIndex]);
}
}
int main() {
int a[10] = { 2,1,9,5,4,7,8,3,6,10 };
selectionSort(a, 10);
for (int i = 0; i < 10; i++)
cout << a[i] << " ";
cout << endl;
system("pause");
return 0;
}