演算法基礎篇 七種內排序演算法C 實現

2021-08-28 09:44:41 字數 2619 閱讀 5081

七種內排序演算法,目前只寫了**,原理解析待補充:

1.交換類排序:冒泡、快排;

2.選擇類排序:選擇、堆排序;

3.插入類排序:直接插入、希爾;

4.歸併排序

測試用例:

51 2 4 3 -3

10100 293 123 212 293 434 5 12 439 3

todo:

原理、複雜度解析與穩定性解析。

#includeusing namespace std;

int n;

//print current array

void echo(int a)

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

cout << a[n - 1] << endl;

}//swap a[i] and a[j]

void swap(int a, int i, int j)

a[i] ^= a[j];

a[j] ^= a[i];

a[i] ^= a[j];

} sort

void bubblesort(int a)

int flag = 1;

for (int i = 0; i < n-1 && flag; i++)

} }}

sort

void quicksort(int a, int left, int right)

int i = left, j = right;

int tmp = a[i];

while (ia[maxi])

}swap(a, n - i - 1, maxi);

echo(a); }}

sort

void adjustheap(int a, int i, int last)

cout << "heap init done." << endl;

}void heapsort(int a)

} sort

void insertsort(int a)

a[j + 1] = tmp;

echo(a); }}

sort

void shellsort(int a)

int i = left, j = mid + 1, len = right - left + 1;

int* tmpmerge = new int[len];

int k = 0;

while (i<=mid && j<=right)

else

} while (i <= mid)

while (j <= right)

memcpy(&a[left], tmpmerge, len * sizeof(int));

delete tmpmerge;

}void mergesort(int a, int left, int right)

int mid = (left + right) / 2;

mergesort(a, left, mid);

mergesort(a, mid + 1, right);

merge(a, left, mid, right);

echo(a);

}int main()

int* tmp = new int[n];

memcpy(tmp, a, n * sizeof(int));

cout << "bubble sort:" << endl;

echo(a);

bubblesort(a);

memcpy(a, tmp, n * sizeof(int));

cout << "quick sort:" << endl;

echo(a);

quicksort(a, 0, n - 1);

memcpy(a, tmp, n * sizeof(int));

cout << "select sort:" << endl;

echo(a);

selectsort(a);

memcpy(a, tmp, n * sizeof(int));

cout << "heap sort:" << endl;

echo(a);

heapsort(a);

memcpy(a, tmp, n * sizeof(int));

cout << "insert sort:" << endl;

echo(a);

insertsort(a);

memcpy(a, tmp, n * sizeof(int));

cout << "shell sort:" << endl;

echo(a);

shellsort(a);

memcpy(a, tmp, n * sizeof(int));

cout << "merge sort:" << endl;

echo(a);

mergesort(a, 0, n - 1);

delete tmp;

delete a;

cout << endl << "input numbers of array: ";

} return 0;

}

C 實現七種經典排序演算法

具體的排序方法如下所示 1 氣泡排序 基本思想 比較相鄰的兩個數,如果前者比後者大,則進行交換。每一輪排序結束,選出乙個未排序中最大的數放到陣列後面。常見氣泡排序演算法如下所示 void bubblesort int arr,int n 公升級版氣泡排序法 通過從低到高選出最大的數放到後面,再從高到...

七種排序演算法

排序方法 平均情況 最好情況 最壞情況 輔助空間 穩定性插入排序 o n 2 o n o n 2 o 1 穩定希爾排序 o n log n o n 2 o n 1.3 o n 2 o 1 不穩定選擇排序 o n 2 o n 2 o n 2 o 1 不穩定氣泡排序 o n 2 o n o n 2 o ...

C語言實現七種排序演算法

1 冒泡法 冒泡法大家都較熟悉。其原理為從a 0 開始,依次將其和後面的元素比較,若a 0 a i 則交換它們,一直比較到a n 同理對a 1 a 2 a n 1 處理,即完成排序。下面列出其 冒泡法原理簡單,但其缺點是交換次數多,效率低。下面介紹一種源自冒泡法但更有效率的方法 選擇法 2 選擇法 ...