#include
void bubble_sort1(int
array,int arraysize)}}
}int main(void)
; bubble_sort1(array,5);/*排序好後為:1 2 3 4 5*/
int i;
for(i=0;i<5;i++)printf("%d",array[i]);
puts("");
}
以前做排序為了省事直接在建立在*.cpp裡,今天遇到問題了。
這段**在g++下執行正確,輸出為12345
但在gcc下執行錯誤,輸出為00235。
應該錯在這句話:array[j]^=array[j+1]^=array[j]^=array[j+1];
疑問:不知兩種編譯下,是異或運算有區別?還是gcc有特殊的序列點? 不了解其中本質。
乙個數(同乙個位址)自己與自己異或3次會是0,但下角標是j和j+1,應該不會涉及到這種情況。
int b[6]= ;/*第乙個數0,是哨兵*/
insertionsort2(b,6);
for(int i=1; i<6; i++)printf("%d ",b[i]);
puts("");
}
#include
void halfsort(int
array,int arraysize)
//找到插入點後,為該值騰出地方,將high+1到i的所有元素後移一位
for(j=i-1;j>high;j--)array[j+1]=array[j];
array[high+1]=temp;
}}int main()
,i; halfsort(array,5);
for(i=0; i<5; i++)printf("%d ",array[i]);
}
很久以前從網上扒下來的
#include
#include
void shellinsert(int
array,int n,int dk)///根據當前增量dk進行插入排序
}void shellsort(int
array,int n,int t)///希爾排序
}int main()
乙個迴圈…但是變數i跑的太折騰了…
#include
void gnomesort(int
array,int arraysize)
}}int main()
; gnomesort(array,5);/*排序後結果為1 2 3 4 5*/
for(int i=0; i<5; i++)printf("%d ",array[i]);
}
#include void quicksort(int
array, int
left, int
right)
array[i] = temp;
quicksort(array, left, i - 1);
quicksort(array, j + 1, right);
}}int main()
,i; quicksort(array, 0, 4);
for (i = 0; i < 5; i++)printf("%d ",array[i]);
}
計數排序是乙個非基於比較的排序演算法
#include
#include
#define maxnum 1000//排序的數字範圍是0-1000
void countingsort(int a, int n, int k)
int main()
,i; countingsort(a, 5, maxnum);
for (i = 0; i < 5; i++)printf("%d ", a[i]);
}
推排序演算法C C
在堆排序演算法中,我們使用的是最大堆。下面的 是給定一組數,構造乙個最大堆。left heap,location 和right heap,location 分別返回陣列heap中location的左右孩子的索引。max heapify heap,i 是確保heap陣列的i的左右孩子都滿足最大堆化。b...
C C 演算法 快速排序
氣泡排序的執行效率太低,因為每次比較相鄰的兩個數,所以時間複雜度為o n 花費的時間太長,所以為了更加的節省時間,提高程式的執行速率,我們可以採用快速排序。對於乙個數集,先把第乙個數當作基準數,然後分別從最右端和最左端向另一方向進行搜尋,以從小到大的順序為例 從右向左搜尋的,遇到比基準數小的與從左向...
C C 演算法 基礎排序
選擇排序 selectionsort 插入排序 insertsort 氣泡排序類似於汽水的氣泡一樣,從杯子底部一直公升到杯子的頂部,在上公升過程中氣泡會逐漸變大,這一過程類似於讓一組資料從小到大排列。從第乙個元素開始,與當前元素的相鄰元素進行比較,如果兩個元素之間逆序則交換,保證在比較完成後一組資料...