七種內排序演算法,目前只寫了**,原理解析待補充:
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 選擇法 ...